您好我正在研究scala语言并且有一个问题。我正在读一本书,其中一个例子说0到2与(0)。到(2)相同。我该如何解释这种语法?我的意思是,我可以看到to是一个函数,它接受一个整数值作为参数。但是什么是"(0)。"部分??感谢
答案 0 :(得分:5)
在scala中,任何采用单个参数的方法都可以使用中缀语法编写。
所以,例如,如果你有
class Foo(x: Int) {
def add(y: Int) = x + y
}
val a = new Foo(42)
然后这两个方法调用完全等效
a.add(4) // 46
a add 4 // 46
0
周围有一个括号的原因是,在较早版本的scala中,0.
会被解释为浮点数,因为.
的值不明确(可以是小数分隔符和方法选择器)。由于scala 2.11(或2.10,我不记得了),这已经修复,所以你现在可以安全地输入
0.+(2) // Int: 2
然后得到一个Int
,而过去你会得到一个Float
,因为编译器会把它视为
0.0 + (2) // Float: 2
答案 1 :(得分:0)
我的意思是,我可以看到
to
是一个以一个整数值作为参数的函数。
不,这不是一个功能,它是一种方法。
通过向对象发送消息来调用方法:
foo.bar(baz)
这意味着“使用bar
引用的对象作为baz
引用的对象的参数发送消息foo
。这将导致方法bar
进入foo
的类或其中一个祖先被调用。
因此,to
是消息,2
是参数,0
是消息的接收者。
Scala允许您使用.
或空格来发送消息:
foo bar(baz)
// is the same as
foo.bar(baz)
此外,当使用空格进行消息发送时,如果只有一个参数,则可以不使用最后一个参数列表的括号:
foo bar baz
// is the same as
foo bar(baz)
最后,括号不仅用于参数列表,它们还用于分组。 (还有元组文字。)你总是可以用括号括起表达式来阐明它的优先级:
(foo).bar(baz)
// is the same as
foo.bar(baz)