Kotlin lambda有几个参数
我有点困惑kotlin lambda表达。 找不到合适的答案。
在Java中,我可以用tho参数设置一个监听器:
myObject.setListener(new MyListener() { @Override public boolean doSmth(int pos, int value) { switch(..) { .... } } })
用lambda:
myObject.setListener((p1, p2) -> { switch(..) { .... } })
在Kotlin,我可以这样做:
myObject.setListener{p1, p2 -> return@setListener false}
要么
myObject.setListener{{p1, p2 -> if (p1) { return@setListener true } else { return@setListener false } }}
但它真的很丑。 有没有办法做到这一点? 我可以这样使用:
myObject.setListener{p1, p2 -> myFunc(p1, p2)}
但是如果我想把自己的逻辑放到这个监听器中(这可能是复杂的,不仅仅是if else return
)
在你的第一个例子中,只需删除return@setListener
myObject.setListener{p1, p2 -> false}
在第二个例子中,你必须小心:
- 你有一对花括号太多
setListener{{
必须setListener{
。 否则你会在一个lambda内创建一个lambda。 -
你再次删除
return
。 这是一个表达式体,其中刚刚使用了结果参数。myObject.setListener{p1, p2 -> if (p1) { true } else { false } }
如果我理解正确,你有这样的事情:
fun main(args: Array<String>) { fun setListener(f: (Int, Int) -> Boolean) { f(1, 2) } setListener { p1, p2 -> true } }
当然,你可以将逻辑提取到另一个函数中,如下所示:
fun logic (i: Int, i2: Int) :Boolean { //complex stuff return true } setListener(::logic)