Scala过程和函数差异

Scala过程和函数差异,scala,Scala,我正在学习Scala并在下面运行代码。我知道Scala中不返回任何内容的函数是过程,但在下面运行代码时,为什么会有额外的()输出。在此过程中,我只是打印“value”的值。 有人能解释一下吗 class Sample{ private var value = 1 def test() {value += 2; println(value)} def test2() = value } object Main2 extends App { val my_counter = n

我正在学习Scala并在下面运行代码。我知道Scala中不返回任何内容的函数是过程,但在下面运行代码时,为什么会有额外的()输出。在此过程中,我只是打印“value”的值。 有人能解释一下吗

class Sample{
  private var value = 1
  def test()  {value += 2; println(value)} 
  def test2() = value
}

object Main2 extends App {
  val my_counter = new Sample()
  println(my_counter.test())
  println(my_counter.test2())

}

3
()
3
所谓的“过程语法”只是返回
Unit
的方法的“语法糖”(在Java中称之为
void

在语义上等同于(并实际翻译为):

注意显式类型和方法签名后面的等号

类型
单元
有一个单独的值,该值被写入
()
(并且读取单元,就像它的类型一样)。这就是您看到的:方法
test
打印
,然后生成
()
类型的
单元
,然后在屏幕上打印


如注释中所述,“过程语法”已被弃用。

过程语法编译为返回单位的方法

调用
单元上的字符串
产生
“()”


您正在打印测试结果(即
Unit
),以便在输出中看到它的字符串表示形式,
()

第一个已弃用。
def sayHello(toWhom: String) {
  println(s"hello $toWhom")
}
def sayHello(toWhom: String): Unit = {
  println(s"hello $toWhom")
}