我将onClick
功能类型声明为类字段val onClick: (() -> Unit)? = null
并想像这样使用它:
if (onClick != null) {
item.setOnClickListener { onClick.invoke() }
}
此代码有效,但是当我用let
函数替换它时,它显示错误unresolved reference: invoke
:
onClick?.let {
item.setOnClickListener { it.invoke() }
}
为什么会这样?
答案 0 :(得分:2)
这里的it
是第二个lambda(被传递到setOnClickListener
中)的接收者,而不是第一个lambda(let
)的接收者。通过显式为其指定名称来将参数声明为第一个lambda,然后使用该名称,例如
onClick?.let { handler ->
item.setOnClickListener { handler.invoke() }
}