1

Aサブタイプ化される共用体のタイプとタイプのパラメーターを制限したいと思いますB。ここで、Bはいくつかの一般的なタイプです。このメソッドにオブジェクトを配置したい:

def accept[A](a:A)(implicit ev:FooOrBaish[A]){ /* do something */}

これは、暗黙を指定する方法です。

case class Foo(i:Int)
trait Baish
case object Bar extends Baish
case class Baz(x:String) extends Baish
class FooOrBaish[A]
object FooOrBaish{
  implicit object FooWit extends FooOrBaish[Foo]
  implicit object BaishWit extends FooOrBaish[Baish]
}

これで、acceptを入れることはできますが、どちらもFoo(5)入れることはできません。コンパイラは次のように叫びます。サブタイプの関係はどこで指定できますか?Baz("a")Barerror: could not find implicit value for parameter ev: FooOrBaish[Baz]

4

1 に答える 1

1

FooOrBaishのタイプを反変になるように変更すると、機能します

class FooOrBaish[-A]
于 2013-03-06T10:20:24.027 に答える