我有一个带有 foreach 方法的案例类:
case class Sequence[A](initialElems: A*) {
private val elems = ArrayBuffer[A]()
elems ++= initialElems
@tailrec
final def foreach(block: A => Unit, elems: ArrayBuffer[A] = elems): Unit = elems.size match {
case 0 =>
case _ =>
block(elems.head)
foreach(block, elems.tail)
}
}
但是我觉得很奇怪,有没有另一种更简单、更高效的写法?
最佳答案
当您可以使用现有的 foreach
方法时,根本不清楚为什么您需要递归函数:
case class Sequence[A](initialElems: A*) {
private val elems = ArrayBuffer[A](initialElems:_*)
final def foreach(block: A => Unit, elems: ArrayBuffer[A] = elems): Unit =
elems.foreach(block)
}
能够传入 elems
值也很奇怪。如果您确实传递了一个值,那么此方法不会使用任何类数据,这意味着它实际上不需要是一个方法。
最后,通常将block
作为最终参数组,以便可以以更自然的方式使用它,如下所示:
case class Sequence[A](initialElems: A*) {
private val elems = ArrayBuffer[A](initialElems:_*)
final def foreach(elems: ArrayBuffer[A])(block: A => Unit): Unit = elems.foreach(block)
final def foreach(block: A => Unit): Unit = elems.foreach(block)
}
val s = Sequence(1,2,3)
s.foreach{ e =>
println(e)
}
关于Scala-还有另一种方法来编写这个 foreach 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51436159/