我知道在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