Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何将作为参数传递的函数定义为可空函数?_Kotlin - Fatal编程技术网

Kotlin 如何将作为参数传递的函数定义为可空函数?

Kotlin 如何将作为参数传递的函数定义为可空函数?,kotlin,Kotlin,根据这个答案,我可以将函数作为参数传递 所以,实际上有两个问题 如果有可能,将bar函数定义为可为空,以使此方法具有重载 如何传递非当前类的函数?例如foo(“test”,myOtherObj.myTestMethod()) 我就是这样做的: fun foo(m: String, bar: ((m: String) -> Unit)?) { bar?.invoke(m) } // my function to pass into the other fun buz(m: Str

根据这个答案,我可以将函数作为参数传递

所以,实际上有两个问题

  • 如果有可能,将
    bar
    函数定义为可为空,以使此方法具有重载
  • 如何传递非当前类的函数?例如
    foo(“test”,myOtherObj.myTestMethod())
  • 我就是这样做的:

    fun foo(m: String, bar: ((m: String) -> Unit)?) {
        bar?.invoke(m)
    }
    
    // my function to pass into the other
    fun buz(m: String) {
        println("top level fun: $m")
    }
    
    class MyClass() { 
        fun buz(m: String) {
            println("instance fun: $m")
        }
    }
    
    fun main() {
        foo("hi", ::buz)
    
        val myInstance = MyClass()
        foo("hi", myInstance::buz)
    }
    

    我认为
    MyClass()::buz
    和例如
    myOtherObj.myTestMethod()
    不一样,对吧?
    MyClass()
    是一个类似
    myOtherObj
    的实例
    MyClass()::buz
    是一个函数引用,
    myOtherObj.myTestMethod()
    是一个函数调用。@AlekseyTimoshchenko
    myOtherObj::myTestMethod
    hmm,我得到了一个类似
    Required(()->Utit)的错误?找到单元
    请检查语法好吗?我刚刚运行了代码,它在Kotlin 1.3.71中运行良好
    fun foo(m: String, bar: ((m: String) -> Unit)?) {
        bar?.invoke(m)
    }
    
    // my function to pass into the other
    fun buz(m: String) {
        println("top level fun: $m")
    }
    
    class MyClass() { 
        fun buz(m: String) {
            println("instance fun: $m")
        }
    }
    
    fun main() {
        foo("hi", ::buz)
    
        val myInstance = MyClass()
        foo("hi", myInstance::buz)
    }