这些定义函数的方法有什么区别?

我从JavaScript的背景尝试学习一些Kotlin。

我知道我可以通过定义我的function

fun add(a: Int , b: Int): Int{ return a+b } 

我正在尝试这个

 val add = { a:Int,b:Int-> println("I am calculating the sale => no body you guy [$x+$y]"); //works } val add = { a:Int ,b : Int -> //How do i return from this function } 

另外这是一个正确的方式来定义Kotlinfunction? 和第一种方式有什么不同?

另外这是一个正确的方式来定义Kotlinfunction? 和第一种方式有什么不同?

这甚至不是“定义Kotlin函数的一种方法”。

在JavaScript中,所有的函数都是通用的 :它们是您可以从variables中引用并传递的第一类值。 在Kotlin中并非如此,就像Java,C ++,Objective C等许多其他语言一样。

函数只是一个声明,你可以调用它,但不能直接引用它。 单独的语言function允许您创建委托给这些function的function对象,并且可以传递这些对象。

因此,

 fun add(a: Int , b: Int): Int { return a + b } 

是一个函数声明和

 val add = {a: Int, b: Int -> a + b } 

是四件事情:

  1. 声明一个variablesadd
  2. 声明函数types的一个匿名实现(Int, Int) -> Int
  3. 实例化这个匿名types,产生一个function对象
  4. 将对象赋值给variablesadd

该对象有一个invoke(a: Int, b: Int): Int方法invoke(a: Int, b: Int): Int ,在块中给出它的实现:

 fun invoke(a: Int, b: Int): Int { return a + b } 

你可以明确地调用它:

 val result = add.invoke(a, b) 

最重要的是,Kotlin定义了语法糖,允许您省略明确的.invoke

你不需要明确的return

 val add = { a: Int, b: Int -> a + b } add(2, 3) // => 5 

希望这会起作用。

 val onChange = { a:Int,b:Int-> println("I am calculating the sale => no body you guy [$x+$y]"); //works } val add = { a:Int ,b : Int -> println("Sunm ${a+b}") //How do i return from this function } Log.v("Response", add(4,3)) 

产量
V /回应:总和7

你不能像这样在kotlin中返回值,因为你没有声明任何返回types,它会给出types不匹配的错误:

 fun add(a: Int , b: Int){ return a+b } //wrong 

我们在kotlin中声明返回types为:

 fun add(a: Int , b: Int) : Int{ return a+b } 

其次,

 val add = { a:Int ,b : Int -> } 

这不是一个函数,它是一个值赋值的声明在kotlin中,我们通过在你的函数名前面添加“fun”来声明函数//你可以在fun之前添加访问修饰符(private,public,protected)默认其公开)

 fun add (){ //if it returns any value then add ": {datatype}" just right of "()" //your code here } 

希望它帮助你:)