在kotlin中将函数作为参数传递

在kotlin中将函数作为参数传递,kotlin,Kotlin,我试图将一个函数作为参数传递,但它抛出的“Unit不能作为函数调用”。提前谢谢 uploadImageToParse(imageFile, saveCall1()) uploadImageToParse(imageFile, saveCall2()) uploadImageToParse(imageFile, saveCall3()) private fun uploadImageToParse(file: ParseFile?, saveCall: Unit) { saveC

我试图将一个函数作为参数传递,但它抛出的“Unit不能作为函数调用”。提前谢谢

uploadImageToParse(imageFile, saveCall1())
uploadImageToParse(imageFile, saveCall2())
uploadImageToParse(imageFile, saveCall3())

private fun uploadImageToParse(file: ParseFile?, saveCall: Unit) {
        saveCall()//Throws an error saying 'Unit cannot be invoked as function'
} 

问题是,您没有将函数作为参数传递给
uploadImageToParse
方法。你通过了结果。另外,
uploadImageToParse
方法期望
safeCall
Unit参数,而不是函数

为此,必须首先声明uploadImageToParse以期望函数参数

fun uploadImageToParse(file: String?, saveCall: () -> Unit) {
    saveCall()
}
然后可以将函数参数传递给此方法

uploadImageToParse(imageFile, {saveCall()})
有关该主题的更多信息,请参阅Kotlin文档

编辑:正如@marstran指出的,您还可以使用将函数作为参数传递


接受函数指针作为参数的操作如下:

private fun uploadImageToParse(file: ParseFile?, saveCall: () -> Unit){
    saveCall.invoke()
}
uploadImageToParse(saveCallParameter={a,b,c->saveCall(a,b,c)}
()
是参数的类型

->单元
部分为返回类型

第二个例子:

fun someFunction (a:Int, b:Float) : Double {
    return (a * b).toDouble()
}

fun useFunction (func: (Int, Float) -> Double) {
    println(func.invoke(10, 5.54421))
}

有关更多信息,请参阅使用lambda表达式的

,我们可以将方法作为参数传递
示例:

fun main(args: Array<String>) {
  MyFunction("F KRITTY", { x:Int, y:Int -> x + y })
}

fun MyFunction(name: String , addNumber: (Int , Int) -> Int) {
  println("Parameter 1 Name :" + name)
  val number: Int = addNumber(10,20)
  println("Parameter 2 Add Numbers : " + number)
}
fun main(args:Array){
MyFunction(“F KRITTY”,{x:Int,y:Int->x+y})
}
fun MyFunction(名称:String,addNumber:(Int,Int)->Int){
println(“参数1名称:”+名称)
val编号:Int=addNumber(10,20)
println(“参数2添加编号:”+编号)
}

以上答案是正确的。我还看到了一个关于带有参数的案例的问题。在这种情况下,您可以使用以下选项:

例如,如果接受函数如下所示:

fun uploadImageToParse(file: String?, saveCallParameter: (a:String,b:Int,c:String) -> Unit) {
saveCall(x,y,z) }
然后你可以这样写你的电话:

private fun uploadImageToParse(file: ParseFile?, saveCall: () -> Unit){
    saveCall.invoke()
}
uploadImageToParse(saveCallParameter={a,b,c->saveCall(a,b,c)}

这里saveCall是命名参数。

{code>{saveCall()}可以写入
::saveCall
。如何使用带参数的函数?基本相同,只是指定它应该使用的参数而不是空的参数列表。例如myFunction:(路径:path)->单位。从文档中看一下这个示例。
fun uploadImageToParse(file: String?, saveCall: () -> Unit) {
    saveCall()
}