我有一个使用valueObject的模板,它可能是两种风格中的一种,具体取决于它在我们的应用程序中使用的位置。所以我将其导入为Either:
valueObject: Either[ ObjectA, ObjectB ]
两个对象都有相同的命名属性,所以我想通过调用
来检索它valueObject.propertyA
哪个不起作用。
最简洁/最好的方式是什么?
答案 0 :(得分:7)
假设两个对象具有定义该属性的相同类型(或超类型/特征) - 您可以使用$(document).ready(function() {
var c = document.getElementById("ComplexPlane");
var number = c.getContext("2d");
number.beginPath();
number.arc(500+50*realPart,300-50*imagPart,10,0,2*Math.PI);
number.stroke();
number.fill();})
,如果它存在则返回左侧,否则,使用两者的最低公共类型: / p>
merge
答案 1 :(得分:2)
fold
假设这两个对象不共享一个包含属性/方法的常用超类型,那么你必须诉诸fold
:
scala> case class A(a: Int)
defined class A
scala> case class B(a: Int)
defined class B
scala> def foldAB(eab: Either[A,B]): Int = eab.fold(_.a,_.a)
foldAB: (eab: Either[A,B])Int
scala> foldAB(Left(A(1)))
res1: Int = 1
scala> foldAB(Right(B(1)))
res2: Int = 1
另一种可能性是使用模式匹配:
scala> def matchAB(eab: Either[A,B]): Int = eab match { case Left(A(i)) => i; case Right(B(i)) => i}
matchAB: (eab: Either[A,B])Int
scala> matchAB(Left(A(1)))
res3: Int = 1
scala> matchAB(Right(B(1)))
res4: Int = 1