背景
我有一个可以返回的小函数
Either<String, Float>
. 如果成功,则返回一个浮点值,否则返回一个错误字符串。
我的目标是在管道中执行一系列操作,并使用其中一种实现面向铁路的编程。
代码
import java.util.function.Function;
import io.vavr.control.Either;
@Test
public void run(){
Function<Float, Either<String, Float>> either_double = num -> {
if(num == 4.0f)
Either.left("I don't like this number");
return Either.right(num * 2);
};
Function<Float, Float> incr = x -> x + 1.0f;
Float actual =
Either.right(2f)
.map(incr)
.map(either_double)
.get();
Float expected = 6.0f;
assertEquals(expected, actual);
}
此代码执行一系列简单操作。首先,我用值2创建一个右值,然后递增,最后将其加倍。这些操作的结果是6。
问题
数学运算的结果是6.0华氏度,但这不是我得到的结果。取而代之的是我得到
Right(6.0f)
.
这是一个阻止代码编译的问题。我有一个价值
装箱的
在任何一个Monad中,但是在检查完
API for Either
我找不到一种方法来解开它并获取值
如
.
我想用
getOrElseGet
但即使该方法也返回一个右键。
问题
如何访问存储在任一monad中的实际值?