28.scala的运算符

Posted 大数据群英萃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了28.scala的运算符相关的知识,希望对你有一定的参考价值。

在Scala中,运算符即是方法。 任何具有单个参数的方法都可以用作 中缀运算符 例如,可以使用点号调用 +

10.+(1)


而中缀运算符则更易读:

10 + 1


定义和使用运算符

你可以使用任何合法标识符作为运算符。包括像 add 这样的名字或像 + 这样的符号。

case class Vec(x: Double, y: Double) { def +(that: Vec) = Vec(this.x + that.x, this.y + that.y)}
val vector1 = Vec(1.0, 1.0)val vector2 = Vec(2.0, 2.0)
val vector3 = vector1 + vector2vector3.x vector3.y

类 Vec 有一个方法 +,我们用它来使 vector1vector2 相加。使用圆括号,你可以使用易读的语法来构建复杂表达式。这是 MyBool 类的定义,其中有方法 andor


case class MyBool(x: Boolean) { def and(that: MyBool): MyBool = if (x) that else this def or(that: MyBool): MyBool = if (x) this else that def negate: MyBool = MyBool(!x)}
现在可以使用 andor 作为中缀运算符:


 
def not(x: MyBool) = x.negatedef xor(x: MyBool, y: MyBool) = (x or y) and not(x and y)
这有助于让方法 xor 的定义更具可读性。


优先级


当一个表达式使用多个运算符时,将根据运算符的第一个字符来评估优先级:

(characters not shown below)* / %+ -:= !< >&^|(all letters)

这也适用于你自定义的方法。例如,以下表达式:


 
a + b ^? c ?^ d less a ==> b | c

等价于

 
((a + b) ^? (c ?^ d)) less ((a ==> b) | c)

?^ 具有最高优先级,因为它以字符 ? 开头。+ 具有第二高的优先级,然后依次是 ==>^?|, 和 less

推荐阅读:




以上是关于28.scala的运算符的主要内容,如果未能解决你的问题,请参考以下文章

10个JavaScript代码片段,使你更加容易前端开发。

20个简洁的 JS 代码片段

20个简洁的 JS 代码片段

如何在 python 中并行化以下代码片段?

JSP 基础语法

获取 badarith,[erlang,'+',[error,0],[],同时使用 Erlang 片段在 TSUNG 中执行算术运算