如何像F#代码那样利用序列在Scala中实现迭代器?

如何像F#代码那样利用序列在Scala中实现迭代器?,scala,f#,iterator,lazy-evaluation,seq,Scala,F#,Iterator,Lazy Evaluation,Seq,我想知道对于这个简短的F#代码片段,等效的Scala代码是什么: 在Scala中真的有可能有这样的东西吗 不过,我实际尝试实现的内容在以下代码中显示: module BST = type t = | Node of int * t * t | Empty let rec toSeq tree = seq { match tree with | Empty -> () | Node(value

我想知道对于这个简短的F#代码片段,等效的Scala代码是什么:

在Scala中真的有可能有这样的东西吗


不过,我实际尝试实现的内容在以下代码中显示:

module BST =
    type t =
        | Node of int * t * t
        | Empty

    let rec toSeq tree = seq {
        match tree with
        | Empty -> ()
        | Node(value, left, right) ->
            yield! toSeq left
            yield value
            yield! toSeq right
    }
我知道如何在Scala中定义有区别的联合(如case-calss),但我不太确定如何实现基于序列的迭代器

如果我没有弄错的话,谢谢你,F#的
seq
是构造
IEnumerable
惰性实例的语法糖。因此,我能想到的最接近Scala的版本是使用:

BST
案例类节点(值:Int,左:BST,右:BST)扩展了BST
case对象为空扩展了BST
def toSeq(树:BST):流[Int]=树匹配{
case Empty=>Stream.Empty
案例节点(值、左、右)=>
toSeq(左)#:::值#:::toSeq(右)
}
如果我没有弄错的话,F#的
seq
是构造
IEnumerable
惰性实例的语法糖。因此,我能想到的最接近Scala的版本是使用:

BST
案例类节点(值:Int,左:BST,右:BST)扩展了BST
case对象为空扩展了BST
def toSeq(树:BST):流[Int]=树匹配{
case Empty=>Stream.Empty
案例节点(值、左、右)=>
toSeq(左)#:::值#:::toSeq(右)
}
如果我没有弄错的话,F#的
seq
是构造
IEnumerable
惰性实例的语法糖。因此,我能想到的最接近Scala的版本是使用:

BST
案例类节点(值:Int,左:BST,右:BST)扩展了BST
case对象为空扩展了BST
def toSeq(树:BST):流[Int]=树匹配{
case Empty=>Stream.Empty
案例节点(值、左、右)=>
toSeq(左)#:::值#:::toSeq(右)
}
如果我没有弄错的话,F#的
seq
是构造
IEnumerable
惰性实例的语法糖。因此,我能想到的最接近Scala的版本是使用:

BST
案例类节点(值:Int,左:BST,右:BST)扩展了BST
case对象为空扩展了BST
def toSeq(树:BST):流[Int]=树匹配{
case Empty=>Stream.Empty
案例节点(值、左、右)=>
toSeq(左)#:::值#:::toSeq(右)
}
module BST =
    type t =
        | Node of int * t * t
        | Empty

    let rec toSeq tree = seq {
        match tree with
        | Empty -> ()
        | Node(value, left, right) ->
            yield! toSeq left
            yield value
            yield! toSeq right
    }