一般我们使用。对象为。这种符号是什么? 我们如何能够从中获得正确的结果?1. +(2)在斯卡拉给出了正确的答案。怎么样?
回答
在Scala中,1例如是对一个对象键入Int。该对象具有方法+,它接受另一个Int作为参数。 此外,Scala有一些语法糖,让你写1.+(2)
为1 + 2
,一样的,你可以写foo.map(bar)
为foo map bar
。
我复制并从“在Scala编程”,这说粘贴文本:
斯卡拉技术上不具有运算符重载,因为它实际上并没有运营商在传统意义上的。相反,可以在方法名称中使用+, - ,*和/等字符。因此,当您在步骤1中将1 + 2键入Scala解释器时,实际上是在Int对象1上调用一个名为+的方法,并将2作为参数传入。如图3.1所示,可以可选地已经使用传统的方法调用的语法写入1 + 2(1)。+(2)
在Scala中,也那些已知在Java“的基本类型”是对象,并且延伸AnyVal
。 在斯卡拉,每个值都是支持某些方法的对象,具体取决于它的类。 数值类型如Int
,Double
等具有之和的方法+
(方法名称不限于字母数字字符)。现在,问题是,斯卡拉提供syntactic sugar
,让这些方法调用显示为operations
(operator syntax
),因此1+2 == 1.+(2)
从Documentation和Int
类Source File,您可以为+
方法得到的描述,它的重载版本:
/** Returns the sum of this value and `x`. */
def +(x: Byte): Int
/** Returns the sum of this value and `x`. */
def +(x: Short): Int
/** Returns the sum of this value and `x`. */
def +(x: Char): Int
/** Returns the sum of this value and `x`. */
def +(x: Int): Int
/** Returns the sum of this value and `x`. */
def +(x: Long): Long
/** Returns the sum of this value and `x`. */
def +(x: Float): Float
/** Returns the sum of this value and `x`. */
def +(x: Double): Double
正如你在这里看到的,+
看起来像一个方法,没有更多。理解符号1.+(2)
就足够了。
然而,这并不是全部。有关更多信息,请参阅here。
1 + 2
是1.+(2)
的简写在这里,+
是该方法的名称。斯卡拉对方法名称中的非字母数字字符没有愚蠢的偏见。您可以使用任何符号名称来定义方法。
一般来说,你可以写a method b
作为a.method(b)
的简写,其中method
是一个带有两个参数(一个隐式,一个显式)的方法。例如,而不是1.to(10)
您可以编写1 to 10
使用任何您认为更易于阅读的内容。开始Scala程序员倾向于坚持Java语法,这就好了。当然,即使是最强硬的Java程序员似乎更喜欢a + b
而不是a.+(b)
。
下面的代码是自我解释,对象int,我想应用这些方法。所以我按了。这给了我一组方法,其中+是其中的一部分,它将int作为参数并返回Int。所以它解释了一切。
的主要原因是
斯卡拉实际上并没有运营商在传统意义上的,但它的方法。
scala> val x=2;
x: Int = 2
scala> x.
!= - == ^ compareTo intValue isPosInfinity isValidShort round toBinaryString toFloat toRadians underlying
% / > abs doubleValue isInfinite isValidByte isWhole self toByte toHexString toShort until
& < >= byteValue floatValue isInfinity isValidChar longValue shortValue toChar toInt unary_+ |
* << >> ceil floor isNaN isValidInt max signum toDegrees toLong unary_-
+ <= >>> compare getClass isNegInfinity isValidLong min to toDouble toOctalString unary_~
scala> x.+
def +(x: Long): Long def +(x: Float): Float def +(x: Int): Int def +(x: Double): Double
def +(x: Short): Int def +(x: Char): Int def +(x: String): String def +(x: Byte): Int
scala> x.+
def +(x: Double): Double def +(x: Char): Int def +(x: Short): Int def +(x: String): String
def +(x: Long): Long def +(x: Float): Float def +(x: Int): Int def +(x: Byte): Int
scala> x.+(3)
res1: Int = 5
- 1. -1%4的正确答案是什么?
- 2. C++ * =没有给出正确的答案
- 3. 欧拉项目#2;代码未能输出正确的答案
- 4. JavaScript输出“1” - - “1”是2怎么样?
- 5. bestappr函数给出了pari/gp中的不正确答案
- 6. 为什么scipy的稀疏求解器给出了不正确的答案?
- 7. 程序在写入时给出错误的答案,但在复制时给出正确的答案
- 8. pmin给出了错误的答案
- 9. 答案是:6÷2(1 + 2)=?
- 10. 单数2斯卡拉解决方案
- 11. 仙功能不给正确的答案
- 12. 在斯卡拉你怎么加入2 RDD
- 13. SUMIF公式没有给出正确的答案在excel vba
- 14. sort_values与排序给出不同的答案,但sort_values是正确的答案
- 15. 给出的答案
- 16. Date.AddDays没有给予正确的答案
- 17. 斯卡拉-java.lang.ArrayIndexOutOfBoundsException:1
- 18. 的Javascript:一个循环后打开URL给出了正确的答案
- 19. 打印两个双打答案给出了答案0.00
- 20. 存储过程是否存在没有给出正确答案
- 21. Matlab的解决给出了答案,当用手计算,是不正确的
- 22. Python unicode搜索没有给出正确的答案
- 23. 在给出正确答案后继续执行
- 24. 我的国家的时区不给出正确的答案
- 25. 浮点不输出正确的答案
- 26. 这段代码为什么给我不正确的答案?
- 27. 在Javascript中 “d.setDate(d.getDate()+ 1)” 给出了错误的答案在是时候改变
- 28. JOptionPane - 正确/不正确的答案
- 29. C++(函数,余弦)没有给出正确的答案
- 30. MPG计算器没有给出正确的答案
在Scala中,'+'是方法名,而不是操作符。 – Shankar
无法理解你的问题.... 1这里是一个Integer,一个Object,'+'Integer的一个方法,以及什么? –
@JohnZeng我读过Scala为每个对象提供丰富的包装库.Rich Int为Int,Rich Float为float等等。那么在这里,究竟发生了什么? – NeoWelkin