Kotlin Arrow库函数组合compose执行逻辑疑问咨询
Kotlin Arrow 谓词组合逻辑说明
核心误区:你混淆了两种完全不同的compose实现
- 你之前认知的是常规函数组合的
compose:规则为f compose g = x -> f(g(x)),该实现的前提是g的输出类型必须和f的输入类型完全匹配。你给出的两个示例函数greaterThanThree和even均为(Int) -> Boolean类型,完全不符合常规函数组合的类型要求,常规场景下该写法无法编译通过。 - 你在Arrow库示例中见到的是专门针对谓词函数(
(T) -> Boolean类型,即判断类函数)重载的compose扩展方法,和常规函数组合没有关系,该重载的作用是实现多个判断条件的逻辑与组合。
该场景下的执行规则与步骤
Arrow中谓词函数的compose组合逻辑等效于两个条件同时满足,对应你示例的代码:
val greaterThanThreeAndEven = greaterThanThree compose even // 完全等效于 val greaterThanThreeAndEven = { x -> greaterThanThree(x) && even(x) }
以x=8为例的执行步骤:
- 输入参数8传入组合后的函数
- 执行
greaterThanThree(8)得到结果true - 执行
even(8)得到结果true - 对两个结果做
&&逻辑与运算,最终返回true
补充说明
函数式库通常会对高频使用的函数类型做运算符重载,除了用compose实现谓词的逻辑与组合外,Arrow也提供了or方法实现逻辑或组合、not方法实现逻辑非取反,简化多条件判断的编写。
内容的提问来源于stack exchange,提问作者Leff
相关产品推荐
相关产品推荐

