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

138 2

我试图将函数作为参数传递,但是,它抛出'Unit cannot be invoked as function '。


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'


} 



时间: 原作者:

63 4

问题是,你没有将函数作为参数传递给uploadImageToParse方法,同时uploadImageToParse方法期望safeCall为Unit参数而不是函数。

为此,必须先声明uploadImageToParse,以预期参数为函数。


fun uploadImageToParse(file: String?, saveCall: () -> Unit) {


 saveCall()


}



然后你可以将函数参数传递给此方法。


uploadImageToParse(imageFile, {saveCall()})



有关主题的更多信息,请查看Kotlin文档中的高阶函数与lambdas

你还可以将函数作为参数传递给function-references 。


uploadImageToParse(imageFile, ::saveCall)



原作者:
92 5

接受函数作为参数是这样做的:


private fun uploadImageToParse(file: ParseFile?, saveCall: () -> Unit){


 saveCall.invoke()


}



()是参数的类型。

-> Unit部分是返回类型。

第二个示例:


fun someFunction (a:Int, b:Float) : Double {


 return (a * b).toDouble()


}



fun useFunction (func: (Int, Float) -> Double) {


 println(func.invoke(10, 5.54421))


}



有关更多信息请参见kotlin Documentation

原作者:
117 1

使用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)


}



原作者:
117 1

例如,如果function如下所示:


fun uploadImageToParse(file: String?, saveCall: (a:String,b:Int,c:String) -> Unit) {


saveCall(x,y,z) }



然后你就可以像这样写你的调用了:


uploadImageToParse(saveCall={a,b,c->saveCall(a,b,c)}



这里的saveCall是命名参数。

原作者:
...