函数组合
考虑如下的函数:
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的长度为奇数的字符串。