我知道在scala中已经有了一些遍历泛型的方法,但我试图定义一个简单的trait封装可遍历的类型。但是,我无法获取类型签名。第一次尝试将类似以下内容:在scala中遍历通用
trait Traversable1[B] {
def head: Option[B]
def next: Traversable1[B]
}
除了我想next
返回拥有相同类型与原始穿越,而不是更一般的穿越类型的对象这个效果很好。例如,如果List
的特性为Traversable1
,那么它的next
方法应返回某种类型的List
而不是Traversable1
。因此,我的第二次尝试以下操作:
trait Traversable2[A[B] <: Traversable2[A[B]] {
def head: Option[B]
def next: A[B]
}
这里,A
可以等于List
,所以next
将返回List[B]
。不幸的是,这段代码不能编译:A[B] takes no type parameters, expected: one
我该如何实现我想要做的?
叫它这不是Iterable的是什么? – acjay
是的,可能。我正在处理更复杂的示例,并试图更深入地理解Scala的类型系统和语法,以便在更复杂的新情况下使用正确的解决方案。 – jonderry
你可能会发现'scalaz.Traverse'的实现很有趣。如上所述,它基于http://www.cs.ox.ac.uk/jeremy.gibbons/publications/iterator.pdf – Hugh