嗨,我正在学习Scala语言并且有一个问题。我正在读一本书,其中一个例子说0到2和(0)。到(2)是一样的。我怎样才能解释这个语法?我的意思是,我可以看到这是一个以一个整数值为参数的函数。但什么是“(0)”。部分??谢谢在scala中调用函数的语法
0
A
回答
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
围绕一个括号的是,在旧版本斯卡拉0.
的由于.
(它既可以是小数点分隔符又可以是方法选择器)的模糊值,可能会被解释为浮点数。由于斯卡拉2.11(或2.10,我不记得了),这已得到修复,所以你现在可以安全地输入
0.+(2) // Int: 2
,并得到一个Int
回来,而你将不得不在过去Float
,如编译器会看到它作为
0.0 + (2) // Float: 2
0
我的意思是,我可以看到,
to
是一个函数,它接受一个整数值作为参数。
不,它不是一个函数,它是一种方法。
的方法是通过将消息发送到一个对象调用:
foo.bar(baz)
这意味着“与由baz
引用作为参数由foo
引用的对象的对象发送消息bar
这将反过来导致方法bar
在foo
的类或其祖先之一要被调用。
所以,to
是消息,2
为参数,并0
是理论值的接收器电子邮件。
斯卡拉允许你使用一个.
或空白的消息发送:
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)
相关问题
- 1. Scala - 方法调用语法
- 2. Scala函数调用
- 3. Scala方法和函数语法概述
- 4. 函数调用语法?
- 5. Scala:动态调用函数
- 6. matlab调用scala函数
- 7. 从nodejs调用Scala函数
- 8. 语法错误在函数调用
- 9. 作为使用scala语法的参数的函数
- 10. 的UIWebView调用javascript函数的语法
- 11. 调用scala方法中的函数时意外的结果
- 12. scala中构造函数的用法
- 13. 语法错误时调用的函数
- 14. PHP在外部文件中调用类中的函数,语法?
- 15. Scala使用部分应用程序的匿名函数语法?
- 16. 使用Razor语法调用JavaScript函数
- 17. 编写调用scala中泛型函数的泛型函数
- 18. Scala函数调用中的隐式函数
- 19. Scala构造函数中的函数不会被调用
- 20. 通过Scala中的隐式函数调用函数
- 21. Scala - 调用'头等函数'的开销
- 22. Scala JS:调用元素的Javascript函数
- 23. Scala:调用超类的构造函数
- 24. 在if语句中调用函数?
- 25. PHP构造函数调用语法
- 26. python函数调用语法... result = foo()['abc']
- 27. 如何在Julia函数调用中使用点语法
- 28. 在Scala中调用超类构造函数的正确方法是什么?
- 29. 在perl中调用函数的方法?
- 30. 用于在类之外调用虚函数的语法?
此外,整数和其他原始类型被自动转换为等效的对象类型。值“0”是一个整数,并自动转换为“Int”。 'Int'有一个方法'to()',它接受一个整数参数。 – 2014-09-05 23:21:59
@Bob,这是另一种方式。 'Int'是一个对象类型,然后在底层JVM中用一个原语表示。在2.10中弃用 – 2014-09-05 23:25:54
,在2.11中新的行为。差异在'val i = 0;'以前是双重的,但现在是错误。 – 2014-09-06 02:06:18