例如,这里有all()
正在运行:
fun Shop.checkAllCustomersAreFrom(city: City): Boolean =
customers.all { it.city == city }
这是kotlin documentation中的等效内容:
inline fun <T> Iterable<T>.all(
predicate: (T) -> Boolean
): Boolean
有人可以解释一下第二个代码块的每个部分以及为什么要这样写吗?
很抱歉,如果这是一个基本问题,但是如果我了解这一点,阅读文档会容易得多。
答案 0 :(得分:4)
让我们分解一下吧?
inline fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean
|--1--|-2-|-3-|-----4-----|-5-|----6-----|------7-------|----8----|
T
的通用类型参数。Iterable<T>
上调用,就好像它是成员函数一样。调用它的Iterable
可以在函数体内以this
的形式访问。T
参数,并返回一个Boolean
。这可以是对具有此签名的常规函数的引用,但是对诸如此类的收集函数的期望是,在大多数情况下,这将是lambda。答案 1 :(得分:1)
内联-将此函数的主体放在编译时而不是调用函数的地方。
乐趣-函数声明
-称为T的通用类型
可迭代-我们也添加了扩展功能。 (如果不是inline
读取静态函数)
全部-函数名称
谓词-名为谓词的参数
:(T)->布尔值-Lambda类型将T作为参数并返回布尔值。通常采用{ it == foo }
:布尔值-返回布尔值