Scala程序和功能差异

时间:2017-02-09 16:44:25

标签: scala

我正在学习Scala并在代码下面运行。我知道函数,不返回任何内容是Scala中的过程但是在代码下运行时为什么extra()会出现在输出中。在这里,我只是打印'价值'的价值。 有人可以解释一下。

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

2 个答案:

答案 0 :(得分:3)

所谓的"程序语法"只是"语法糖"对于返回Unit的方法(在Java中称为void)。

def sayHello(toWhom: String) {
  println(s"hello $toWhom")
}

在语义上等效(并实际翻译):

def sayHello(toWhom: String): Unit = {
  println(s"hello $toWhom")
}

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

类型Unit有一个值()(和读取单位,就像它的类型一样)。这就是您所看到的:方法test打印value,然后生成类型为()的{​​{1}},然后您可以继续在屏幕上打印。

如评论中所述,"过程语法"已弃用,将在该语言的未来版本中删除。

答案 1 :(得分:2)

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

Unit上调用toString会产生"()"

您正在打印出测试结果(Unit),因此您会在输出中看到其字符串表示形式()