1

Scala 中是否可以对两种不相关的类型进行限制?例如,

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

谢谢

4

1 回答 1

1

如果您的AandB完全不相关(例如,没有您需要的常用方法,否则您可以只使用结构类型),这意味着当您将其用作方法参数时,您仍然需要它实际上是什么类型才能使用它们.

在这种情况下,Either[A, B]正是您所需要的。它表示一个对象必须是 A 或 B 之一,您可以在 Either 类中使用模式匹配或其他方法来检查它们。

例如:

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

您可能对这篇文章感兴趣,它非常清楚地解释了 Either 是什么。

于 2013-04-23T15:29:04.350 回答