2011-11-16 103 views
3

鑑於這個例子中引用抽象類型:從參數化類型

abstract class Base { type Value } 
case object Foo extends Base { type Value = String } 

case class Bar[A <: Base](a: A, value: A#Value) 

val x = Bar(Foo, "It's a Foo") // Won't compile with found String required ?#Value 

我想有該類型約束爲value是相同類型A。即String因爲我通過了Foo。我知道我可以用不同的方式進行建模,但很高興知道它是否可能?

回答

2

作爲一個起點,它編譯並提供了一些你需要的約束條件。

abstract class Base { type Value } 
case object Foo extends Base { type Value = String } 

case class Bar[A <: Base, V <: A#Value](a: A, value: V) 

val x = Bar(Foo, "It's a Foo") 
+0

太棒了!非常感謝你。 – chrsan