Scala与单位一起

Wil*_* Am 6 scala

我很好奇这样做的正确方法.假设我想通过方法发出成功或失败的信号.这是否可以接受,如果在成功的情况下除了成功之外没有什么我想说的话?

def fn(): Either[Throwable, Unit]
Run Code Online (Sandbox Code Playgroud)

从这个方法返回Right()的正确方法是什么?显然只是返回Right()给出了一个弃用警告(插入()的参数列表的改编已被弃用).

我也可以做Option [Throwable],但这并不符合我如何阅读Option的精神.或者可能返回scala.util.Try的结果并评估成功/失败?

- 关于弃用警告,仅供参考.

Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101).
Type in expressions for evaluation. Or try :help.

scala> def fn:Either[Throwable, Unit] = { Right() }
<console>:11: warning: Adaptation of argument list by inserting () has been deprecated: this is unlikely to be what you want.
        signature: Right.apply[A, B](b: B): scala.util.Right[A,B]
  given arguments: <none>
 after adaptation: Right((): Unit)
       def fn:Either[Throwable, Unit] = { Right() }
                                               ^
fn: Either[Throwable,Unit]
Run Code Online (Sandbox Code Playgroud)

pam*_*amu 7

您可以使用Unit类型并返回().

def fn(): Either[Throwable, Unit] = Right(())
Run Code Online (Sandbox Code Playgroud)


try*_*ryx 3

我想说这取决于您正在寻找的 API 类型。

def fn(): Either[Throwable, Unit]对我来说听起来很不习惯。如果您期望该函数的主要结果是副作用,那么使用Either. 这是因为它是单子操作链的终端操作而出现的吗?

如今它变得不那么流行和不惯用了,但我可能会选择 aTry[A]并处理那里的情况。另一个惯用的选择是Either创建所有错误类型的密封特征层次结构,并从有效函数而不是原始Throwable实例中返回这些错误,而不是在您的 中重新排列异常。

Right()我没有看到您在调用或Right( () )在 REPL时注意到的错误,scalac您使用的是哪个版本?