
操作基本数据类型.pdf
4页Scala 操作基本数据类型操作基本数据类型Scala 提供了丰富的运算符⽤来操作前⾯介绍的基本数据类型前⾯说过,这些运算 符(操作符)实际为普通类⽅法的简化(或者称为美化)表⽰⽐如 1+2 ,实际为 (1).+(2) ,也就是调⽤ Int 类型的+⽅法例如:scala> val sumMore = (1).+(2) sumMore: Int = 3实际上类 Int 定义了多个+⽅法的重载⽅法(以⽀持不同的数据类型)⽐如和 Long 类 型相加符号为⼀运算符,为⼀中缀运算符 在 Scala 中你可以定义任何⽅法为⼀ 操作符 ⽐如 String 的 IndexOf ⽅法也可以使⽤操作符的语法来书写 例如:scala> val s =“Hello, World“ s: String = Hello, World scala> s indexOf 'o' res0: Int = 4由此可以看出运算符在 Scala 中并不是什么特殊的语法,任何 Scala ⽅法都可以作为操 作符来使⽤是否是操作符取决于你如何使⽤这个⽅法,当你使⽤ s.indexOf(‘o’) indexOf 不是⼀个运算符 ⽽你写成 s indexOf ‘o’ ,indexOf 就是⼀个操作符,因为你 使⽤了操作符的语法。
除了类似+的中缀运算符(操作符在两个操作符之间),还可以有前缀运算符和后缀 运算符顾名思义前缀运算符的操作符在操作数前⾯,⽐如 -7 的“-”后缀运算符的 运算符在操作数的后⾯,⽐如 7 toLong 中的 toLong 前缀和后缀操作符都使⽤⼀个 操作数,⽽中缀运算符使⽤前后两个操作数Scala 在实现前缀和后缀操作符的⽅ 法,其⽅法名都以 unary_-开头⽐如:表达式 -2.0 实际上调⽤ (2.0).unary_-⽅法scala> -2.0 res1: Double = -2.0 scala> (2.0).unary_- res2: Double = -2.0如果你需要定义前缀⽅法,你只能使⽤+,-,! 和~四个符号作为前缀操作符后缀操作符在不使⽤.和括号调⽤时不带任何参数在 Scala 中你可以省略掉没有参数 的⽅法调⽤的空括号按照惯例,如果你调⽤⽅法是为了利⽤⽅法的“副作⽤”,此时 写上空括号,如果⽅法没有任何副作⽤(没有修改其它程序状态),你可以省略掉括 号⽐如:scala> val s =“Hello, World“ s: String = Hello, Worldscala> s toLowerCase res0: String = hello, world具体 Scala 的基本数据类型⽀持的操作符,可以参考 Scala API ⽂档。
下⾯以⽰例介绍 ⼀些常⽤的操作符:算术运算符 + – × /scala> 1.2 + 2.3 res0: Double = 3.5scala> 'b' -'a' res1: Int = 1scala> 11 % 4 res2: Int = 3scala> 11.0f / 4.0f res3: Float = 2.75scala> 2L * 3L res4: Long = 6关系和逻辑运算符包括 >,=,!等scala> 1 >2 res5: Boolean = falsescala> 1.0 val thisIsBoring = !true thisIsBoring: Boolean = falsescala> !thisIsBoring res7: Boolean = truescala> val toBe=true toBe: Boolean = truescala> val question = toBe || ! toBe question: Boolean = true要注意的是逻辑运算⽀持“短路运算”,⽐如 op1 || op2 ,当 op1=true ,op2 ⽆需再计 算,就可以知道结果为 true。
这时 op2 表⽰式不会执⾏例如:scala> def salt()= { println(“salt“);false} salt: ()Boolean scala> def pepper() ={println(“pepper“);true} pepper: ()Boolean scala> pepper() && salt() pepper salt res0: Boolean = false scala> salt() && pepper() salt res1: Boolean = false位操作符scala> 1 & 2 res2: Int = 0scala> 1 | 2 res3: Int = 3scala> 1 ^ 2 res4: Int = 3scala> ~1 res5: Int = -2对象恒等⽐较如果需要⽐较两个对象是否相等,可以使⽤==和!=操作符scala> 1 == 2 res6: Boolean = falsescala> 1 !=2 res7: Boolean = truescala> List(1,2,3) == List (1,2,3) res8: Boolean = truescala> (“he“+“llo“) == “hello“ res9: Boolean = trueScala 的==和 Java 不同,scala 的==只⽤于⽐较两个对象的值是否相同。
⽽对于引⽤类 型的⽐较使⽤另外的操作符 eq 和 ne操作符的优先级和左右结合性Scala 的操作符的优先级和 Java 基本相同,如果有困惑时,可以使⽤()改变操作符 的优先级 操作符⼀般为左结合,Scala 规定了操作符的结合性由操作符的最后⼀个 字符定义对于以“:”结尾的操作符都是右结合,其它的操作符多是左结合例如:ab 为 a.(b) ⽽ a:::b 为 b.:::(a),⽽ a:::b:::c = a::: (b ::: c) , abc= (ab)cW3Cschool()最⼤的技术知识分享与学习平台此篇内容来⾃于⽹站⽤户上传并发布。












