Chapter 05 《Basic Types and Oper
2018-06-12 本文已影响0人
liqing151
基础类型
Byte,Int,Long,Short,Char成为整数类型,加上Double,Float称为数值类型。Scala在编译的时候可以将Scala中的值类型转换为Java中的基本类型。
字面量
- 字符串字面量:
Scala使用"""来表示原生字符串。可以包含任意的特殊字符。
- 字符串字面量:
- 符号字面量:语法为
'ident,ident是标识符,会被映射称为scala.Symbol的实例,Symbo("ident")。经常被用在动态类型的语言中用来当做标识符的场合。
- 符号字面量:语法为
字符串插值
- 在字符串字面量中插入表达式,是编译器通过重写代码实现的。
- 有常见的
s插值器,会对内嵌的每个表达式求值,对结果使用toString方法。使用$开始表示一个表达式。
- 有常见的
val s="This is ${7+8}"
还有raw插值器和f插值器。raw类似于s,但不识别转义字符。f可以使用printf的风格来进行格式化的输出数据。
scala> f"${math.Pi}%.5f" res1: String = 3.14159
将格式化的指令放在表达式之后,使用java.util.Formatter中给出的语法。
操作符表示法
- 在
Scala中,任何方法都可以是操作符。操作符的表示方法为object method para或者object method (para1,para2),这种表示方法也成为中缀操作符。这里的前中后指的是操作符的位置。
- 在
-
-7是前缀表达式,调用的方法名称为unary_加上操作符,前者的调用方法就是(7).unary_-,可用于前缀表达式中的前缀操作符也是有限的,只有+,-,!,~,别的符号都不可以的。
-
-
7 toLong是后缀表达式,后缀表达符指的是不接受参数而且在调用的时候没有圆括号的方法。
-
对象相等性
==在大部分场合都能返回所需要的相等性比较结果。先检测左侧是否为null,如果不是,则调用equals方法,目前的实现是基于内容的情况下进行实现。不检测右侧对象是否为null
操作符优先级和结合性
优先级决定了计算表达式的顺序
- 在
Scala中并不存在真正的操作符,仅仅是使用方法的一种表现形式。Scala中使用方法名的首字母来判断优先级。
Name * / % + - : = ! < > & ^ | (all letters) (all assignment operators)
- 赋值操作符以
=(*=)结尾,而且不是比较操作符<=, >=, ==, or !=,它们的优先级和=一样。*=的优先级就比+要更低。
结合性确定了操作符的分组。
- 结合性由操作符的最有一个字符决定。以:结尾的在右侧操作元上调用方法,其余的则在左侧操作元上调用。
a ::: b ::: c = a ::: (b ::: c)但是操作元都是从左到右被求值的。
a ::: b = { val x = a; b.:::(x) }
a计算出来之后传给b当做参数。
富包装类
- 本章的所有基础类型,在隐式转换的辅助下,都对应着一个富包装类。
Byte => scala.runtime.RichByte