首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin:调用者主体中的函数参数实现

Kotlin:调用者主体中的函数参数实现
EN

Stack Overflow用户
提问于 2017-07-19 23:57:16
回答 2查看 73关注 0票数 0
代码语言:javascript
复制
fun lazyProperty(initializer: () -> Int): Int {                
  val result: Lazy<Int> = lazy(initializer)
  return result.value                   
}                

fun main(args: Array<String>) {                
  //    1.
  val bar: Int = lazyProperty({ 1 + 1 })
  //    2.
  val foo: Int = lazyProperty() {
    42
  }

  println("bar $bar, foo: $foo")
}

我最近偶然发现了在Kotlin中调用函数的语法,我就是不明白:第一个选项很清楚-它是一个lambda,但第二个看起来不像用所需参数调用函数的常规语法。通常应该放置参数的括号是空的,取而代之的是函数参数出现在调用者的主体中!这是怎么可能的,需要它做什么?

EN

Stack Overflow用户

发布于 2017-07-20 13:33:25

这只是个惯例。如果函数的最后一个参数是函数,则可以在括号外传递lambda。在您的情况下,您有以下选项:

代码语言:javascript
复制
val bar: Int = lazyProperty({ 1 + 1 })
val bar: Int = lazyProperty() { 1 + 1 }
val bar: Int = lazyProperty { 1 + 1 }

所有三个选项都是相同的。

如果您的函数有第二个参数(在第一个位置),则调用可能如下所示:

代码语言:javascript
复制
fun lazyProperty(x: Int, initializer: () -> Int): Int {...}

val bar: Int = lazyProperty(7, { 1 + 1 })
val bar: Int = lazyProperty(7) { 1 + 1 }

如果您的函数有第二个参数(在第二个位置),则调用可能如下所示:

代码语言:javascript
复制
fun lazyProperty(initializer: () -> Int, x: Int): Int {...}

val bar: Int = lazyProperty({ 1 + 1 }, 7)

因此,请始终尝试将Lambda放在函数的最后位置。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45195566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档