2

我正在尝试从 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中做到这一点吗?

4

1 回答 1

3

Scala 具有使用and关键字的序列理解,如下例所示:foryield

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))
}
于 2018-05-31T17:05:55.103 回答