Function Kotlin函数声明:大括号前的等号

Function Kotlin函数声明:大括号前的等号,function,kotlin,Function,Kotlin,在Kotlin中,函数声明语法允许您在花括号前写等号 考虑以下两个例子: 无=符号: fun foo1(){ println(“baz1”) } 只需调用foo1()即可执行主体内的代码 带有=符号: fun foo2()={ println(“baz2”) } 在这里,当调用foo2()时,不会发生任何事情,但要执行主体,可以编写foo2()() 这两个声明的区别是什么?为什么它们的行为不同? 您可以使用以下程序运行代码: fun main(){ foo1() foo2() } /* 此代

在Kotlin中,函数声明语法允许您在花括号前写等号

考虑以下两个例子:

  • =
    符号:
  • fun foo1(){
    println(“baz1”)
    }
    
    只需调用
    foo1()
    即可执行主体内的代码

  • 带有
    =
    符号:
  • fun foo2()={
    println(“baz2”)
    }
    
    在这里,当调用
    foo2()
    时,不会发生任何事情,但要执行主体,可以编写
    foo2()()

    这两个声明的区别是什么?为什么它们的行为不同?

    您可以使用以下程序运行代码:

    fun main(){
    foo1()
    foo2()
    }
    /*
    此代码示例生成以下结果:
    baz1
    */
    


    这个问题虽然没有太多的意义,但是[作者有意提出并回答][1],因为有一些问题已经被张贴在人们因为错误的函数定义而遇到问题的地方。尽管视觉上相似,但这两个声明的想法是完全不同的

    1.不带等号的函数声明 没有等号的函数声明是a(类似于Java的
    void
    函数)

    花括号内的是它的主体,它在函数调用时被正确执行。可以使用明确指定的
    单元
    重写函数:

    fun foo1():单位{
    println(“baz1”)
    返回装置
    }
    
    Kotlin不需要
    单元
    -返回函数的return语句和显式返回类型,通常都会被省略

    2.带等号的函数声明 带等号的函数声明是一个,它只返回等号右边的内容

    一个简单的例子:
    fun getInt()=1
    只是
    fun getInt():Int{return 1}
    的一个较短形式

    foo2
    中,右侧是表达式。lambda代码块内的代码未执行。换句话说,
    foo2
    是一个返回另一个函数的函数

    foo2
    的返回类型是
    ()->Unit
    ,一个函数本身,因此
    foo2
    是一个函数

    如果没有语法糖,并且使用显式类型,
    foo2
    可以重写为

    fun foo2():()->单位{
    val结果:()->Unit={println(“baz2”)}
    返回结果
    }
    
    至于用法,
    foo2
    返回的函数可以存储在一个变量中,传递,然后可以调用

    val f=foo2()
    f()//相当于
    f、 调用()
    
    这也是示例中执行lambda主体代码的原因

    或者,我们可以在声明foo2()时在末尾添加
    ()
    ,如下例所示。因此,在调用
    foo3()
    时将调用lambda表达式。但这不是一个好模式

    fun foo3()={
    println(“baz3”)
    }()
    
    Kotlin或IDE应该对此进行检查。我的问题是函数调用后出现大括号。媒体文章解释了不同的句法选择。