美文网首页
Kotlin函数

Kotlin函数

作者: demoyuan | 来源:发表于2020-12-22 15:39 被阅读0次

    函数的定义

    Kotlin中函数的定义和Java中的方法还是有很大区别的,首先必须有 fun 关键字,其他部分内容见上图。其中 Unit 等价于Java中的 void ,并且 :Unit 是可以省略的

    函数VS方法

    • 方法可以认为是函数的一种特殊类型
    • 从形式上看,有 receiver 的函数即为方法

    函数的类型

    • 第一个例子
    fun foo() {}//的函数类型是:() -> Unit
    
    • 第二个例子
    fun foo(p0: Int): String {
        return ""
    }//的函数类型是:(Int) -> String
    
    • 第三个例子
    class Foo {
        fun bar(p0: String, p1: Long): Any {
            return 0
        }
    }
    

    的函数类型是:

    Foo.(String, Long) -> Any//第一种写法
    (Foo, String, Long) -> Any//第二种写法
    

    前两个例子比较简单,第三个例子中的Foo就是上面提到的函数和方法区别中的receiver了。其实receiver就是这种类函数中隐藏的第一个参数,在Java的方法中我们可以使用this关键字访问类中的成员其实也是因为this是通过方法的第一个参数被传入进来的。比较有意思的是在python中receiver是直接显示的:

    class Foo:
    
        def bar(self,p0,p1):
            pass
    

    函数的引用

    • 函数的引用类似C语言中的函数指针,可用于函数传递
    fun foo() {}//的函数引用表示为 ::foo
    
    class Foo {
        fun bar(p0: String, p1: Long): Any {
            return 0
        }
    }//的函数引用表示为 Foo::bar
    

    既然是函数引用,那么就可以通过变量去接收

    val r1: () -> Unit = ::foo
    val r2: (Foo, String, Long) -> Any = Foo::bar
    

    这里有一点需要注意的是,如果当我们通过类的实例去表示函数引用的时候,那么函数类型中就不再包含receiver了:

    val foo = Foo()
    val r3: (String, Long) -> Any = foo::bar
    

    相关文章

      网友评论

          本文标题:Kotlin函数

          本文链接:https://www.haomeiwen.com/subject/hfddektx.html