kotlin:用多个lambdaexpression式调用高阶函数
有可能调用具有多个lambda函数的函数吗?
如果是这样,我怎样才能调用以下function?
fun post(path: String, params: JSONObject, completionHandler: (response: JSONObject?) -> Unit, errorCompletionHandler: (error: VolleyError?) -> Unit )
你可以定义如下所示的lambdaexpression式。 您可以将它们分配给variables以使代码更具可读性。 如果你的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
可以在这里省略,因为如果没有其他的指定,它就是隐式返回types。
是的,你可以拥有尽可能多的lambda。 显示的post
可以调用如下:
post("/a", "json", {response-> println(response) }, { error-> println(error)})
如文档中所述,也可以将最后一个lambda从括号中提取出来:
在Kotlin中,有一个约定,如果函数的最后一个参数是一个函数,并且传递一个lambdaexpression式作为相应的参数,则可以在括号外指定它。
适用于您的代码,这意味着:
post("/a", "json", { response -> println(response) }) { error -> println(error) }