Kotlin范围函数:Android EditText支持* apply *,* let *和* run *但不支持* with *
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin范围函数:Android EditText支持* apply *,* let *和* run *但不支持* with *相关的知识,希望对你有一定的参考价值。
我有一个包含EditText的Activity。进口途径:
import kotlinx.android.synthetic.main.myActivity.*
我想使用with
函数但由于某种原因只能访问其他作用域函数:
显示apply
,also
,run
,runCatching
,takeIf
和takeUnless
,但不是with
(是的,我向下滚动甚至打出来。如果我这样做,它标记为未知)。
为了澄清,这里实际发生了什么:
对象何时具有这些功能以及何时不具有规则?
这是因为当apply
具有2个参数时,also
,run
,runCatching
,takeIf
,takeUnless
和with
是扩展。 Here是关于此的好文章。
你可以像这样使用with
:
with(editText) {
//your code
}
但你不能打电话给with
,因为你试图这样做:
editText.with() //compilation error
更新:with
函数的目的是更容易调用对象方法,你不需要写这样的东西:
someObject.a();
someObject.b();
someObject.c();
//etc
当你使用with
时,你可以像这样写:
with(someObject) {
a();
b();
c();
//etc
}
您没有得到任何有关函数的建议,因为它没有源类型作为扩展名,而其他扩展包含附加到它的源。怎么样?
看看下面的区别:
有功能
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
...
return receiver.block()
}
让功能
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
...
return block(this)
}
这里T
是扩展的源类型。
以上是关于Kotlin范围函数:Android EditText支持* apply *,* let *和* run *但不支持* with *的主要内容,如果未能解决你的问题,请参考以下文章
Android:Kotlin详细入门学习指南-函数-基础语法
Android:Kotlin详细入门学习指南-高阶函数-基础语法
Android:Kotlin详细入门学习指南-高阶函数-基础语法