defer() 和 defer{} 有什么区别

What is the difference between defer() and defer{}

我在研究RxKotlin,问题出现了:defer()defer{}

有什么区别

两者的功能相同,区别在于Kotlin语法。

如果一个函数接收一个函数作为最后一个参数,它可以在括号外传递。有关详细信息,请参阅 the documentation and

但是我不知道关于 RxKotlin 的细节。

defer()defer {} 只是写同一件事的两种方式。 Kotlin 在某些特定情况下允许使用一些快捷方式来帮助编写更具可读性的代码。

这里是重写一些代码的例子。

例如给定以下函数:

fun wrapFunctionCall(callback: (Int) -> Int) {
   println(callback(3))
}
wrapFunctionCall(x: Int -> {
  x * x
})

// Most of the time parameter type can be infered, you can then let it go
wrapFunctionCall(x -> {
  x * x
})

// Can omit parameter, and let it be name `it` by default
wrapFunctionCall({
  it * it
})

// wrapFunctionCall accepts a lambda as last parameter, you can pull it outside the parentheses. And as this is the only parameter, you can also omit the parenthesis
wrapFunctionCall {
  it * it
}

https://kotlinlang.org/docs/lambdas.html#function-types