1

Scala で無関係な 2 つの型を制限することは可能ですか? 例えば、

trait A
trait B
def m(T <: A or B) ????

ありがとう

4

1 に答える 1

1

Aとがまったく無関係である場合B(たとえば、必要な一般的なメソッドがない、そうでなければ構造体型を使用するだけでよい)、それをメソッド パラメーターとして使用する場合、それらを使用するために実際にどのような型であるかが必要であることを意味します。 .

この場合、Either[A, B]はまさに必要なものです。これは、オブジェクトが A または B のいずれかである必要があることを示しており、どちらかのクラスでパターン マッチングまたはその他の方法を使用してそれらをチェックできます。

例えば:

class MyClassA { 
  def methodA() = println("I'm A")
}

class MyClassB {
  def methodB() = println("I'm B")
}

def m(a: Either[MyClassA, MyClassB]) {
   a match {
     case Left(a) => a.methodA()
     case Right(b) => b.methodB()
   }
}

m(Left(new MyClassA))  // OK
m(Right(new MyClassB)) // OK
m(Left(new MyClassB))  // Failed, a Left must be a MyClassB instance

あなたはこの記事に興味があるかもしれません.Eirとは何かを非常に明確に説明しています.

于 2013-04-23T15:29:04.350 に答える