Java Scala-foreach返回
你是如何使这种方法起作用的Java Scala-foreach返回,java,scala,foreach,return,Java,Scala,Foreach,Return,你是如何使这种方法起作用的 def filled(b: Board): Board = { b.next foreach { n => if (n.filled) n else filled(n) } } 我需要它在第一次填充n(n.filled==true)之后返回,就像在Java中一样 现在我得到: chess-knight.scala:72: error: type mismatch; found : Unit required: this.Boar
def filled(b: Board): Board = {
b.next foreach { n =>
if (n.filled) n
else filled(n)
}
}
我需要它在第一次填充n(n.filled==true)之后返回,就像在Java中一样
现在我得到:
chess-knight.scala:72: error: type mismatch;
found : Unit
required: this.Board
b.next foreach { n =>
^
one error found
谢谢 这不是你需要的吗
def filled(b: Board): Board = b.next find {_.filled} get
假设b.next
是一个Seq[Board]
,并且始终至少有一个填充的Board
如果您坚持纯功能性,则更喜欢利用模式匹配的方法,而不是列表
:
def filled(b: Board): Board = {
b.next match {
case n :: _ if(n.filled) => n
case _ :: rest => filled(rest)
case Nil => throw NoSuchElementException
}
这不是你需要的吗
def filled(b: Board): Board = b.next find {_.filled} get
假设b.next
是一个Seq[Board]
,并且始终至少有一个填充的Board
如果您坚持纯功能性,则更喜欢利用模式匹配的方法,而不是列表
:
def filled(b: Board): Board = {
b.next match {
case n :: _ if(n.filled) => n
case _ :: rest => filled(rest)
case Nil => throw NoSuchElementException
}
是什么让你认为你的第一个解决方案不是纯粹的功能性的?@NikitaVolkov:我的意思是List
是根据head
和tail
定义的,模式匹配利用了这一事实。人们可以想象,filter
也被定义为head
和tail
,因此第二种方法只使用基本的构造,而没有辅助方法,错误地使用了术语“纯功能”。这是主要问题-填充的是(n:Board):Board,而不是(n:List[Board]):板,分支中不总是有一个填充板。这类似于用骑士填充8x8国际象棋棋盘。@Etam:好的,我有点迷路了,有filled
方法和filled(b:board)
方法吗?它们有何不同?你能把你的问题扩大一点吗?是什么让你认为你的第一个解决方案不是纯粹的功能性的?@NikitaVolkov:我的意思是列表
是根据头
和尾
定义的,模式匹配利用了这一事实。人们可以想象,filter
也被定义为head
和tail
,因此第二种方法只使用基本的构造,而没有辅助方法,错误地使用了术语“纯功能”。这是主要问题-填充的是(n:Board):Board,而不是(n:List[Board]):板,分支中不总是有一个填充板。这类似于用骑士填充8x8国际象棋棋盘。@Etam:好的,我有点迷路了,有filled
方法和filled(b:board)
方法吗?它们有何不同?你能把你的问题扩大一点吗?