Scala “什么是”呢;(),即“单位价值”;?

Scala “什么是”呢;(),即“单位价值”;?,scala,Scala,My scalatest单元测试失败,并显示以下消息: <(), the Unit value> was not equal to object ... 不等于对象。。。 “单位值”的类型和值是什么?类型是Unit,此类型可以接受的唯一值是文本() Unit是scala.AnyVal的子类型。只有一个Unit()类型的值,并且在基础运行时系统中没有任何对象表示它。返回类型为Unit的方法类似于声明为void的Java方法 单位值是从没有任何其他返回类型的任何表达式返回的,例如 &

My scalatest单元测试失败,并显示以下消息:

<(), the Unit value> was not equal to object ...
不等于对象。。。

“单位值”的类型和值是什么?

类型是
Unit
,此类型可以接受的唯一值是文本
()

Unit是scala.AnyVal的子类型。只有一个Unit()类型的值,并且在基础运行时系统中没有任何对象表示它。返回类型为Unit的方法类似于声明为void的Java方法

单位值是从没有任何其他返回类型的任何表达式返回的,例如

> val q = 1 until 10 foreach (_+1) // arbitrary expression of type Unit is assigned to q
q: Unit = ()
定义这样的函数时:

def foo(x: Int) { 
 ..
}
Scala希望返回该单元。相当于

def foo(x: Int): Unit = { .. }
简而言之:单位在java或C++中是空洞的,除了Scala中没有表达式“没有返回任何东西”。如果表达式/函数是单位类型,它代表的东西不返回任何真正的兴趣。我假设在单元测试的某个地方,当您期望它返回不同值的东西时,您有返回()的东西;可能你已经写信了

def foo {
 ..
  val result = something
}
而不是

def foo: SomethingType = {
  ..
  val result = something
  result
}

也许这会有帮助:谢谢。如果我想将一个值与“单位值”匹配,那么要匹配的值是什么?我尝试了
“单位值”必须是(单位)
,但匹配失败。@HowardGuo只需使用
()
。或使用任何其他值,如
akka.Done