我试图从F#转到Scala。在F#中,我们可以轻松地创建带有计算表达式或monad的seq。例如:
let myseq = seq {
let mutableList = List()
for i = 0 to 100 do
mutableList.append(i)
yield sum(mutableList)
}
myseq |> Seq.iter println
我读到了scala Stream
,但我不确定如何正确使用它,就像上面的例子一样,它包含一些状态在seq生成期间不断更新。
另一个例子是在seq中执行一些初始化和清理工作:
let myseq = seq {
let file = open(path)
while (x = read(file)) do
yield x
file.close() }
我们可以在scala中执行此操作吗?
答案 0 :(得分:3)
Scala使用for
和yield
关键字Sequence Comprehensions,如下例所示:
object ComprehensionTest extends App {
def even(from: Int, to: Int): List[Int] =
for (i <- List.range(from, to) if i % 2 == 0) yield i
Console.println(even(0, 20))
}