0
我想要實現這個較低的類型綁定答:斯卡拉:無單
implicit def aConvertable(obj: A): B = new B(obj)
implicit def aConvertableWithoutB[T <: A without B](obj: T): C = new C(obj)
什麼是正確的方式說:「一個沒有B」?
我想要實現這個較低的類型綁定答:斯卡拉:無單
implicit def aConvertable(obj: A): B = new B(obj)
implicit def aConvertableWithoutB[T <: A without B](obj: T): C = new C(obj)
什麼是正確的方式說:「一個沒有B」?
我假設B是A的一個子類型。技巧是引入一個適用於所有A的隱式「AllowedConversion」特徵,然後爲B具有相同類型的兩個隱式實例,重新曖昧B:
object Foo {
trait A
class B(a: A) extends A
class C(a: A)
class AllowedConversion[T]
implicit def allowedForAs[T<:A] = new AllowedConversion[T]
implicit def contradictoryForBs[T <: B] = new AllowedConversion[T]
implicit def contradictoryForBs2[T <: B] = new AllowedConversion[T]
implicit def aConvertable(obj: A): B = new B(obj)
implicit def aConvertableWithoutB[T <: A](obj: T)(implicit allowed: AllowedConversion[T]): C = new C(obj)
// error!
// new B(new A{}):C
// ok!
new A{}:C
}
我很想知道爲什麼你需要這個。 –
你可能會在這裏找到一些提示或線索(這是一個引人入勝的閱讀!):http://www.chuusai.com/2011/06/09/scala-union-types-curry-howard/ –
甚至更好:http ://stackoverflow.com/questions/6909053/enforce-type-difference –