Android Kotlin执行可选操作
我有一个带有可选高阶函数(()->单位)的模型 当我想调用这个函数时,我想知道,即使它是可选的,我怎么能调用它呢 我知道这很管用Android Kotlin执行可选操作,android,kotlin,Android,Kotlin,我有一个带有可选高阶函数(()->单位)的模型 当我想调用这个函数时,我想知道,即使它是可选的,我怎么能调用它呢 我知道这很管用 model.action?.invoke() 有一个类似于Swift?的地方,我可以做: model.action?() 我知道,我也能做到: model.action?.let { action() } 也许最后一个是“更好”的方式。 你知道什么“更好”的方法吗? 谢谢您可以按如下方式使用标准库功能: val actionResult = model.acti
model.action?.invoke()
有一个类似于Swift?的地方,我可以做:
model.action?()
我知道,我也能做到:
model.action?.let { action() }
也许最后一个是“更好”的方式。
你知道什么“更好”的方法吗?
谢谢您可以按如下方式使用标准库功能:
val actionResult = model.action?.let { it() }
请注意,let
(model.action
)的接收器在lamda中作为it
公开
或者,最好是IMO,调用如下函数:
model.action?.invoke()
您可以按如下方式使用标准库函数:
val actionResult = model.action?.let { it() }
请注意,let
(model.action
)的接收器在lamda中作为it
公开
或者,最好是IMO,调用如下函数:
model.action?.invoke()
这是个人喜好的问题,但我会选择第一种变体,即
model.action?.invoke()
这仅仅是因为它只是of,并且没有向表达式中添加更高级别函数(即let
)的负担
顺便说一句,在某些情况下,如果您在Idea中编写类似于
model.action?.let{it()}
(至少它对基于Idea的Android Studio有效),您会收到一条警告说let
在这里没有用,您可以安全地用简单的安全调用替换它 这是个人偏好的问题,但我会选择第一种变体,即
model.action?.invoke()
这仅仅是因为它只是of,并且没有向表达式中添加更高级别函数(即let
)的负担
顺便说一句,在某些情况下,如果您在Idea中编写类似于
model.action?.let{it()}
(至少它对基于Idea的Android Studio有效),您会收到一条警告说let
在这里没有用,您可以安全地用简单的安全调用替换它 如果函数返回unit
,我也会使用而不是let
。前者是一个副作用的构造,后者用于返回值。如果函数返回unit
,我也会使用,而不是let
。前者是一个副作用的构造,后者用于返回值。谢谢@aga,是的,我更喜欢那个,对我来说,它比。letI真的不喜欢invoke()
,但它是一个同样有效的替代方法谢谢@aga,是的,我更喜欢那个,对我来说,它比.letI更简洁。我并不喜欢invoke()
,但它是一个同样有效的替代方法