编辑开始:
您可以在下面的repl中尝试以下两个代码片段,以查看我想要的内容。
Kotlin代码(无效,在onComplete函数调用中要求输入参数)
fun toPass(name: String, age: Int) {
println("Name is $name and age is $age")
}
toPass("Hakan", 26)
fun test(title: String, onComplete: (String, Int) -> Unit) {
println("from test")
onComplete()
println("from test END")
}
test("customTitle", toPass("Emre", 32))
JavaScript代码(工程)
function toPass(name, age) {
console.log(`Name is ${name} and age is ${age}`)
}
toPass("Hakan", 26)
function test(title, onComplete) {
console.log("from test")
onComplete()
console.log("from test END")
}
test("customTitle", toPass.bind("Emre", 32))
编辑结束
///////////////////////////////////////////////// ////////
我想将一个函数作为onComplete回调传递给另一个函数。
原因是回调将把本地范围内的引用作为参数。所以我想在这里利用闭包来解决我的问题。就像在javascript中一样。
我想将一些参数绑定到我要传递的函数上。
fun functionToPass(name: String, age: Int){
}
fun someProcess(title: String, onComplete: (String, Int) -> Unit){
var builder = AlertDialog.Builder()
...
.setPositiveButton(android.R.string.ok, object: DialogInterface.OnClickListener{
override fun onClick(dialog: DialogInterface?, which: Int) {
onComplete()
}
})
...
...
builder.create().show()
}
我想在下面做,我用javascript编写了下面的代码,它将值绑定到“名称”和“年龄”参数
someProcess("MyTitle", functionToPass.bind("Hakan", 26))
我如何在Kotlin中做同样的事情?我只知道如何发送引用,但是我想绑定值以使用闭包,这样对我来说更容易编写代码逻辑。
谢谢
我已经检查了Kotlin文档,但仅显示了如何传递引用,没有显示在传递引用时将值绑定到参数的示例。
答案 0 :(得分:1)
我不确定我是否真的理解问题,但是我认为您可以执行以下操作:
=IFERROR(SUM(INDEX('I:\Original Folder\Data Folder\Counts Folder\Reports Folder\2019\July\[Counts_”&D1&”.xlsx]General1'!D$4:XFD$500,,MATCH(A2,'I:\Original Folder\Data Folder\Counts Folder\Reports Folder\2019\July\[Counts_”&D1&”.xlsx]General1'!D$2:XFD$2,0))),SUM(INDEX('I:\Original Folder\Data Folder\Counts Folder\Reports Folder\2019\July\[Counts_”&D1&”.xlsx]General2'!D$4:XFD$500,,MATCH(A2, 'I:\Original Folder\Data Folder\Counts Folder\Reports Folder\2019\July\[Counts_”&D1&”.xlsx]General2'!D$2:XFD$2,0))))
您可以这样称呼它:
func apply<T>(_ f:(T ...) -> T, with elements:[T]) -> T {
var elements = elements
if elements.count == 0 {
return f()
}
if elements.count == 1 {
return f(elements[0])
}
var result:T = f(elements.removeFirst(), elements.removeFirst())
result = elements.reduce(result, {f($0, $1)} )
return result
}
答案 1 :(得分:0)
为什么不传递lambda函数作为参数?
此外,它与Kotlin函数的工作方式相同
someProcess("My title", { "Hakan", 26 -> yourLogic })