Scala Either:获取左右存在的属性的最简单方法

xen*_*.be 4 scala either

我有一个使用valueObject的模板,它可能是两种风格之一,具体取决于它在我们的应用程序中使用的位置.所以我将其导入为Either:

valueObject:[ObjectA,ObjectB]

两个对象都有相同的命名属性,所以我想通过调用来检索它

valueObject.propertyA

哪个不起作用.

这样做最简洁/最好的方法是什么?

Tza*_*har 7

假设两个对象具有定义该属性的相同类型(或超类型/特征) - 您可以使用merge哪个返回左侧(如果存在),否则右侧,两者的最低公共类型:

scala> class MyClass {
 | def propertyA = 1
 | }
defined class MyClass

scala> val e1: Either[MyClass, MyClass] = Left(new MyClass)
e1: Either[MyClass,MyClass] = Left(MyClass@1e51abf)

scala> val e2: Either[MyClass, MyClass] = Right(new MyClass)
e2: Either[MyClass,MyClass] = Right(MyClass@b4c6d0)

scala> e1.merge.propertyA
res0: Int = 1

scala> e2.merge.propertyA
res1: Int = 1
Run Code Online (Sandbox Code Playgroud)