我需要一些使用traits和結構類型作爲類型參數約束的代碼片段的遞歸結構類型。它工作得很好,但後來我學會了Scala不支持遞歸結構類型。關於Scala中(遞歸)結構類型的有趣觀察
所以有人可以解釋我爲什麼能正常工作:
scala> trait Test[M[A] <: { def map[B](f: A => B) : M[B] } ] {}
defined trait Test
,這不:
scala> def test[M[A] <: { def map[B](f: A => B) : M[B] } ] = null
<console>:5: error: illegal cyclic reference involving type M
def test[M[A] <: { def map[B](f: A => B) : M[B] } ] = null
實際上,我喜歡使用類型別名的解決方案,它甚至可以用於函數定義。但是你的第一個例子的行爲與我的完全一樣,說Test-trait編譯得很好。但是,如果它使用類型別名,它絕對應該工作而不使用它們?!? – urso 2010-11-18 11:11:32
是的,我認爲這裏有一些不一致:它應該使用類型別名和不使用,或者它不應該工作。這就是爲什麼我認爲這是編譯器中的一個小故障。 – michid 2010-11-18 12:53:17
你有錯誤跟蹤器號碼嗎? – soc 2010-11-23 13:10:22