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) }