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

时间:2018-01-10 06:22:55

标签: kotlin

我来自Javascript的背景,试图学习一些Kotlin。

我知道我可以通过

来定义我的功能
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
}

这也是定义Kotlin功能的正确方法吗?和第一种方式有什么区别?

4 个答案:

答案 0 :(得分:5)

  

这也是定义Kotlin功能的正确方法吗?和第一种方式有什么区别?

这甚至不是“定义Kotlin功能的方法”。

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

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

因此,

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

是一个函数声明和

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

是四件事:

  1. 声明变量add
  2. 声明函数类型(Int, Int) -> Int
  3. 的匿名实现
  4. 实例化此匿名类型,生成功能对象
  5. 将对象分配给变量add
  6. 该对象有一个方法invoke(a: Int, b: Int): Int,您在块中给出了它的实现:

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

    您可以明确地调用它:

    val result = add.invoke(a, b)
    

    并且Kotlin定义了语法糖,允许您省略显式.invoke

答案 1 :(得分:2)

您不需要明确return那里

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

add(2, 3) // => 5

答案 2 :(得分:0)

希望这会奏效。

s.pod_target_xcconfig = { 'SWIFT_OBJC_BRIDGING_HEADER' =>'$(PODS_ROOT)/../SwiftDemo/SwiftDemo-Bridging-Header.h' }

<强>输出
V /回复:总和7

答案 3 :(得分:0)

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

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

我们在kotlin中声明返回类型:

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

其次,

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

这不是一个函数,它是一个赋值的声明 在kotlin中,我们通过添加&#34; fun&#34;来声明函数。在您的函数名称之前 //如果需要,可以在&#34; fun&#34;(默认为公开)

之前添加访问修饰符(私有,公共,受保护)
fun add (){ //if it returns any value then add ": {datatype}" just right of "()" 
//your code here
}

希望它能帮到你:)。