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