是否可以调用具有多个lambda函数的函数?
如果是,我该如何调用以下功能?
fun post(path: String,
params: JSONObject,
completionHandler: (response: JSONObject?) -> Unit,
errorCompletionHandler: (error: VolleyError?) -> Unit
)
答案 0 :(得分:3)
是的,你可以拥有任意数量的lambdas。显示的post
可以按如下方式调用:
post("/a", "json", {response-> println(response) }, { error-> println(error)})
如documentation中所述,也可以从括号中提取最后一个lambda:
在Kotlin中,有一个约定,如果函数的最后一个参数是一个函数,并且你将一个lambda表达式作为相应的参数传递,你可以在括号之外指定它。
应用于您的代码,这意味着:
post("/a", "json", { response -> println(response) }) { error ->
println(error)
}
答案 1 :(得分:1)
您将定义lambdas,如下所示。您可以将它们分配给变量以使代码更具可读性。如果lambda变大,这就变得特别方便了。
val completionHandler: (JSONObject?) -> Unit = { response ->
// ...
}
val errorCompletionHandler: (VolleyError?) -> Unit = { error ->
// ...
}
post("/path", jsonObject, completionHandler, errorCompletionHandler)
或者您可以使用引用定义传递的函数:
fun errorCompletionHandler(error: VolleyError?) {}
fun completionHandler(response: JSONObject?) {}
post("/path", jsonObject, ::completionHandler, ::errorCompletionHandler)
请注意,Unit
可以在这里省略,因为如果没有指定其他内容,它就是隐式返回类型。