【问题标题】:Kotlin fun() vs lambda is there difference?Kotlin fun() 与 lambda 有区别吗?
【发布时间】:2019-09-20 02:17:33
【问题描述】:

这个问题是关于 fun() 与 lambda 块定义和范围的对比。
我尝试以两种方式定义表达式。这是我尝试过的:

  val myFunction = fun(){
    println("i am in a function")
    }

//but i also tried doing this:

    val myFunction = {
    println("i am in a lambda")
    }

我的问题是我不知道它们是否等效且相同?

【问题讨论】:

  • 我相信 return 在体内的行为不同。就像,在第一种情况下,它将是来自 myFunction 的返回,而在第二种情况下 1) 在您当前的代码中,您不能使用 return 2) 作为接受 lambdas 的函数的参数,它将是来自外功能。另外我怀疑第一种情况在作为参数传递时会禁用内联。
  • @dyuhka 请不要猜测。您可以使用链接(例如语言参考)来证明您的观点。

标签: kotlin lambda anonymous-function


【解决方案1】:

https://kotlinlang.org/docs/reference/lambdas.html#anonymous-functions 中最好地描述了差异:

  1. 匿名函数允许您指定返回类型,而 lambdas 则不允许。

  2. 如果你不这样做,返回类型推断就像普通函数一样工作,而不是 lambdas。

  3. 正如@dyukha所说,return的含义不同:

    没有标签的 return 语句总是从用 fun 关键字声明的函数返回。这意味着 lambda 表达式内的 return 将从封闭函数返回,而匿名函数内的 return 将从匿名函数本身返回。

  4. 没有隐式的it 参数或解构。

你的具体情况是一样的,是的。

【讨论】:

    【解决方案2】:

    查看参考:https://kotlinlang.org/docs/reference/lambdas.html

    有几种方法可以获取函数类型的实例:

    在函数文字中使用代码块,形式之一:

    • 一个 lambda 表达式:{ a, b -> a + b },
    • 一个匿名函数:fun(s: String): Int { return s.toIntOrNull() ?: 0 }

    两者都给你一个可以互换使用的函数对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      相关资源
      最近更新 更多