也就是说在lambda内部,传给调用的接收者对象成为隐式的this,我们可以用this去访问它的成员变量。这个时候invoke的第一个参数就是接收者也就是this的值: dataclassPerson(varname:String,varage:Int)funwith(person:Person,block:Person.()->R){returnblock.invoke(person)}with(person){println("my name is${t...
可以看出with函数是接收了两个参数,分别为T类型的对象receiver和一个lambda函数块,所以with函数最原始样子如下: val result = with(user, { println("my name is $name, I am $age years old, my phone number is $phoneNum") 0 }) 但是由于with函数最后一个参数是一个函数,可以把函数提到圆括号的外部,...
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...
4. 带接收者的函数字面值(function literals with receiver) 和函数字面值类似,带接收者的函数字面值也包括两种,lambda表达式及匿名函数。 4.1 带接收者的lambda表达式 带接收者的lambda表达式的示例如下: valsquareFun:Int.()->Int={this*this} 带接收者类型的lambda表达式与普通lambda表达式的区别为带接收者的lambd...
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类的方法的扩展,还记得有这样的代码...
let、run、with、apply 以及 also这5种作用域函数各自的角色定位; 5种作用域函数的差异区分; 何时何地使用这5种作用域? / Kotlin的作用域函数 / Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数并提供...
1、run 函数传入 Lambda 表达式作为参数 2、run 函数传入函数引用作为参数 四、with 标准库函数 五、also 标准库函数 六、takeIf 标准库函数 七、takeUnless 标准库函数 Kotlin语言中 , 在 Standard.kt 源码中 , 为所有类型定义了一批标准库函数 , 所有的 Kotlin 类型都可以调用这些函数 ; ...
在Kotlin中,带有接收器的lambda表达式允许你在lambda体内直接调用接收器对象的方法,而不需要显式地使用this或对象实例。这种特性使得代码更加简洁和易读。 基础概念 接收器(Receiver):接收器是指一个对象的实例,lambda表达式可以在其内部通过该实例调用方法。
目前有let、run、with、apply和also五个作用域函数。 官方文档有张表来说明它们之间的区别: https://kotlinlang.org/docs/scope-functions.html#function-selection 总结一下有几点区别: 1、apply和also返回上下文对象。 2、let、run和with返回 lambda 结果。
with函数定义 public inline fun <T, R> with(receiver: T, block: T.() -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return receiver.block() } 可以看出with是一个正常函数。 with函数使用场景 with(mTextView){ this?.text ?:= "haha" this?.setTextColor(Color...