当前位置: 首页 > 知识库问答 >
问题:

Scala或带单位

姬乐池
2023-03-14

我很好奇这样做的正确方式。假设我想从一个方法中发出成功或失败的信号。如果在成功的情况下我没有什么想说的,除了它成功了,这是可以接受的吗?

def fn(): Either[Throwable, Unit]

那么,从这个方法返回Right()的正确方法是什么呢?显然,仅仅返回Right()就给出了一个弃用警告(通过插入()来调整参数列表的做法已被弃用)。

我也可能做Option[抛弃],但这不符合我阅读Option的精神。或者返回scala的结果。util。尝试并评估成功/失败?

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

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]

共有2个答案

马高谊
2023-03-14

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

def fn():在我看来,[可丢弃的,单位]听起来很不习惯。如果您期望函数的主要结果是副作用,那么使用似乎没有什么用处。这是因为它是一元操作链的终端操作吗?

这些天来,它变得不那么流行,也不那么地道了,但我可能会去试试,然后在那里处理这些案例。另一种惯用的选择是创建一个所有错误类型的密封特征层次结构,并从有效函数而不是原始的可丢弃实例返回这些属性,而不是在中洗牌异常。

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

屈翰飞
2023-03-14

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

def fn(): Either[Throwable, Unit] = Right(())
 类似资料:
  • 下面是代码的味道:https://scastie.scala-lang.org/bQMGrAKgRoOFaK1lwCy04g 我有两个JSON APIendpoint。首先是项目。cgi以以下格式返回项目对象列表 表示项目没有借款人。 其次,用户。cgi,返回查询参数id指定的用户 API可能不好,但我必须处理它。现在在Scala中,我想使用这个漂亮的数据模型 我还有以下用于执行HTTP请求的方法

  • 我试图用https://github.com/slick/slick-examples/blob/master/src/main/scala/scala/slick/examples/lifted/firstexample.scala: 如果使用 还有...

  • 我有一个JVM应用程序,需要在IntelliJ2016.3.5中使用带有Gradle任务(作为依赖项运行和测试)的断点进行调试。 关于如何使用Gradle和Intellij完成调试,有各种来源: 使用Intellij调试Gradle插件 在gradle项目中使用Intellij设置断点(最有帮助的) https://youtrack.jetbrains.com/issue/idea-119551

  • 将函数传递给另一个函数的Scala示例缺少传递的函数(时间段)接受参数(x)的情况。 我怎样才能使上述代码工作? 编辑:我在oncepersecond中添加了一个x,以明确目标是传递整数。

  • 我用reactive mongo创建了简单的Webflux (kotlin)应用程序。控制器有一个GET方法,它是返回流(来自一个集合的2个对象)。我使用Apache基准测试,我注意到一件事:我有i7 10700 (8个8核)。如果我设置system . set property(" reactor . netty . ioworkercount "," 8 "),性能会提高。对于16个netty