我正在学习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
答案 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
),因此您会在输出中看到其字符串表示形式()
。