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} 

在第二个例子中,你必须小心:

  1. 你有一对花括号太多setListener{{必须setListener{ 。 否则你会在一个lambda内创建一个lambda。
  2. 你再次删除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)