如果一个方法被定义为
def toList = { /* something */ }
那么它必须被称为
object.toList
没有额外的括号。我们说这个方法有零参数列表.
我们还可以定义一个参数列表,但不向其中添加任何内容:
def toList() = { /* something */ }
现在,我们可以调用其中任何一个
object.toList()
object.toList
因为 Scala 允许在方法调用时省略括号的捷径。
就 JVM 而言,第一个定义(“零参数列表”)和第二个定义(“一个空参数列表”)没有区别。但 Scala 仍然保持着自己的特色。这是否是一个好主意还有待商榷,但是当您意识到我们还可以时,动机可能会更清楚
def toList()() = { /* something */ }
这被称为两个空参数列表,然后调用任意一个
object.toList()()
object.toList()
object.toList
现在,如果我们要将其转换为函数,我们将其键入为
() => () => T /* T is the return value of the something */
而第二个定义是
() => T
这在概念上显然是不同的,即使实际上你以同样的方式使用它(什么都不放进去,迟早会拿出一个T
).
Anyway, toList
不需要任何参数,Scala 标准是省略括号,除非该方法更改对象本身(而不是仅仅返回某些内容),所以它是def toList
之后没有任何括号。因此你只能称其为object.toList
.