Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin执行可选操作_Android_Kotlin - Fatal编程技术网

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()
,但它是一个同样有效的替代方法