这些定义函数的方法有什么区别?
我从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 }
是四件事情:
- 声明一个variables
add
- 声明函数types的一个匿名实现
(Int, Int) -> Int
- 实例化这个匿名types,产生一个function对象
- 将对象赋值给variables
add
。
该对象有一个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 }
希望它帮助你:)