Kotlin fun() vs lambda 有区别吗?

Kotlin fun() vs lambda is there difference?

这个问题是关于 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")
    }

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

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

There are several ways to obtain an instance of a function type:

Using a code block within a function literal, in one of the forms:

  • a lambda expression: { a, b -> a + b },
  • an anonymous function: fun(s: String): Int { return s.toIntOrNull() ?: 0 }

两者都为您提供了一个可以互换使用的函数对象

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

  1. 匿名函数允许您指定 return 类型,lambda 不能。

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

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

    A return statement without a label always returns from the function declared with the fun keyword. This means that a return inside a lambda expression will return from the enclosing function, whereas a return inside an anonymous function will return from the anonymous function itself.

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

您的具体案例将是等效的,是的。