如果您想要一个惰性序列,请使用Stream
:
case class Output(value: Int)
def getOutput(isValidInput: Boolean):Stream[Output] = getOutput(isValidInput, 1)
def getOutput(isValidInput: Boolean, index: Int):Stream[Output] =
if (isValidInput && index < 3) {
println("Index: " + index)
Output(index) #:: getOutput(isValidInput, index+1)
} else {
Stream.empty[Output]
}
println("Calling getOutput")
val result: Stream[Output] = getOutput(true)
println("Finished getOutput")
result foreach println
这导致:
Calling getOutput
Index: 1
Finished getOutput
Output(1)
Index: 2
Output(2)
如果您想将返回类型保持为List[Output]
, usingyield
是一种有效的方法:
def getOutput(isValidInput: Boolean):List[Output] =
if (isValidInput) {
(for (i <- 1 until 3) yield Output(i))(collection.breakOut)
} else {
List.empty[Output]
}
此外,使用 aVector
通常比 a 更可取List
。
有关的: