*/@kotlin.internal.InlineOnlypublicinline fun<T,R>with(receiver:T,block:T.()->R):R{contract{callsInPlace(block,InvocationKind.EXACTLY_ONCE)}returnreceiver.block()} with 函数的第一个参数是 receiver: T 接收者 , 第二个参数是 block: T.() -> R , 是 T.() -> R 类型的 Lambda 表达式 ...
run无法将“this”重命名为一个可读的lambda参数,而let可以将“it”重命名为一个可读的lambda参数。在let多重嵌套时,就可以看到这个特点的优势所在。 with & run with和run其实做的是同一种事情,对上下文对象都称之为“this”,但是他们又存在着不同,我们...
4. 带接收者的函数字面值(function literals with receiver) 和函数字面值类似,带接收者的函数字面值也包括两种,lambda表达式及匿名函数。 4.1 带接收者的lambda表达式 带接收者的lambda表达式的示例如下: valsquareFun:Int.()->Int={this*this} 带接收者类型的lambda表达式与普通lambda表达式的区别为带接收者的lambd...
return receiver.block() } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. with 函数的第一个参数是 receiver: T 接收者 , 第二个参数是 block: T.() -> R , 是 T.() -> R 类型的 Lambda 表达式 ; 代码示例 : fun main() { val str = with("hello") { capitalize() } pri...
我们可以看到joinToString的调用地方是使用了lambda表达式作为参数的简化形式,将它从圆括号中提出来了。这个确实给调用带来一点小疑惑,因为并没有显示表明lambda表达式应用到哪里,所以不熟悉内部实现的开发者很难理解。对于这种问题,Kotlin实际上给我们提供解决办法,也就是我们之前博客提到过的命名参数。使用命名参数后的代码...
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block() 1. 泛型T,R 第一个参数是一个对象,第二个参数是(Lambda)该Lambda有点特别: block: T.() -> R 1. T.()这个代码初看无法理解。通过IDE我偶然发现了,其实T.()是T类的方法的扩展,还记得有这样的代码...
2.1 with 函数使用的一般结构 with(object) {//todo} 2.2 with 函数底层的inline扩展函数+lambda 结构 @kotlin.internal.InlineOnlypublicinlinefun<T, R>with(receiver:T, block:T.() ->R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) ...
let是通过使用“It”关键字来引用对象的上下文,因此,这个“It”可以被重命名为一个可读的lambda参数,如下将it重命名为book:2.2 run run函数以“this”作为上下文对象,调用方式与let一致。关于run的第一点:1️⃣当lambda表达式中同时包含对象初始化和返回值的计算时,run更适合。这句...
Java中的lambda语法 Java8中的lambda语法还是很简洁的,与kotlin中的也十分相似,可以参考开始认识lambda,这里举简单的例子。 Consumer<String> out = (String s) -> {System.out.println(s)};//标准lambda表达式Consumer<String> simpleOut = s -> System.out.println(s);//简化版Consumer<String> methodRefOut...
这里会将 PoemsAuthor::getName 识别成 KFunction 类型,KFunction 是 kotlin 中的高阶函数,与 kotlin 中的 lambda 表达式有着极其密切的关系,其中 KFunction 接受的类型如下: KFunction Analogue ReceiverFunction KFunction1 (Interface) -> Result Interface.() -> Result KFunction2 (Interface, Input) -> Re...