基础类型
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
网友评论