Kotlin执行可选操作

我有一个可选的高阶函数(() – >单位)模型?

当我想要调用这个函数,我想知道,我怎么称呼它甚至是可选的。

我知道这个工程

model.action?.invoke() 

有一些类似Swift的东西,我可以这样做:

 model.action?() 

我知道,我也可以做:

 model.action?.let { action() } 

也许这最后一个是“更好”的路要走。 你知道一些“更好”的方法吗? 谢谢

在大多数情况下, let stdlib函数是一个不错的选择:

 val actionResult = model.action?.let { it() } 

请注意letmodel.action )的接收器可以在lambdaexpression式中访问。

这是个人偏好的问题,但我会留在第一个变体,即

 model.action?.invoke() 

只是因为它只是invoke操作符的安全调用 ,并没有在expression式中添加更高级别的函数(即let )的负担。

顺便说一下,在某些情况下,如果你在Idea中写了一些类似于model.action?.let { it() }的东西(至少它适用于基于Idea的Android Studio),你会得到一个警告,你可以安全地用普通的安全电话代替它。

如果函数返回unit ,我also使用, let 。 前者是一个副作用的结构,后者用于返回一个值。