我有一个类型为[A,B]的对象数组.如果我知道某个特定元素是A还是B,那么如何在其上调用仅存在于2种类型之一上的方法.例如:
import scala.util.Random object EitherTest extends App { def newObj(x: Int): Either[A,B] = { if (x == 0) Left(new A()) else Right(new B()) } val random = new Random() val randomArray = (0 until 10).map(_ => random.nextInt(2)) val eitherArray = randomArray.map(newObj) (0 until 10).foreach(x => randomArray(x) match { case 0 => eitherArray(x).aMethod() case 1 => eitherArray(x).bMethod() case _ => println("Error!") }) } class A { def aMethod() = println("A") } class B { def bMethod() = println("B") }
当我编译这段代码时,就行了
case 0 => eitherArray(x).aMethod() case 1 => eitherArray(x).bMethod()
解决方法
我不知道为什么折叠没有得到它应得的尊重.它可能非常有用.
eitherArray.foreach(_.fold(_.aMethod(),_.bMethod()))