为什么Scalaz\/ type有getOrElse但没有得到?

Xia*_*ong 4 scala scalaz

据我所知,Scalaz \/没有get方法.有时我确信包含的值\/是正确的值,我不想使用getOrElse.我想直接得到它.

("3".right[Int]) getOrElse("123123123") // 3

if (t.isRight) t.get // compilation error, no get method
Run Code Online (Sandbox Code Playgroud)

如果有保证,我怎样才能直接获得正确的价值.

我有两种方法可以获得价值,但两者看起来都有点冗长.

1:更改为scala

val t = "3".right[Int]
val either = t.toEither

if (either.isRight) either.right.get
else either.left.get
Run Code Online (Sandbox Code Playgroud)

2:使用getOrElse

("3".right[Int]) getOrElse("123123123") // but for some cases I don't have this default value
Run Code Online (Sandbox Code Playgroud)

Jon*_*oad 5

没有get因为get 可以抛出异常,这并不酷.Scalaz通过不允许直接访问该值来强制执行此操作.

如果您提供更多信息,我们可以提供解决方案.

t should be safe.

val safe_thing:T = ???
val either: Throwable \/ T = getFromSomewhere

either getOrElse safe_thing
Run Code Online (Sandbox Code Playgroud)