函数组合

考虑如下的函数:

fun <A, B, C> compose(f: (B) -> C, g: (A) -> B): (A) -> C {
    return { x -> f(g(x)) }
}

它返回两个函数的组合形式:compose(f, g) = f(g(*))。

fun length(s: String) = s.length
val oddLength = compose(::isOdd, ::length)
val strings = listOf("a", "ab", "abc")
println(strings.filter(oddLength)) // Prints "[a, abc]"

下面来理解一下上述的函数类型,从最终的调用来看,

第一个函数类型是(Int) -> Boolean,分别对应于B、C

第二个函数类型是(String) -> Int,分别对应于A、B

组合函数返回的函数类型是(String) -> Boolean

最终的调用f(g(x))就是:获取String的长度为奇数的字符串。

results matching ""

    No results matching ""