Scala解释器
-
工作原理实际上是将输入快速编译成字节码,然后提交给JVM运行并输出结果,因此称为REPL
-
REPL
Read
Evaluation
Print
Loop
-
-
:paste
- 进入粘贴模式
-
在解释器中运算返回的值为常量
例如 scala> 3*5
res3: Int = 15此处 res3 不可再负值,是一个常量
声明值和变量
-
常量
- val
-
变量
- var
-
值的声明的类型是放到名称后面的,和go语言类似, 另外声明后如果有负值,声明时为说明类型,则编译器也会自动推断
var xmax, ymax = 100
var greeting, message: String = null
常用类型
-
类型
Byte
Char
Short
Int
Long
Float
Double
-
类型上可以执行方法
-
例子
1.toString()
1.to(10)
-
备注
- 有点像C#的扩展函数
-
算术和操作符重载
Scala几乎可以对任何符号为方法命名
-
运算符在scala也是方法
- a + b 可以认为是a.+(b)
-
方法可以隐式调用
- 1.to(10) 可以写成 1 to 10
存在 counter+=1 但不存在 counter++
调用函数的方法
-
import
-
import scala.math._
- _是java中的*
import math._ 等同于 import scala.math._, 前面的scala可以省略
-
单例对象(singleton object)
-
伴生对象(companion object)
类似java中的静态方法
BigInt.probablePrime(100, scal.util.Random)
-
使用习惯
-
不带参数的Scala方法通常不使用圆括号(执行后不改变当前对象)
- “Hello”.distinct
-
apply方法
-
可以认为是用类似函数的方法对()进行重载
伴生对象上可以用
实例对象上也可以用
-
例子
-
例1
-
java访问数组
- s.charAt(4)
-
scala访问数组
def apply(n: Int): Char
“Hello”(4)
-
-
例2
-
BigInt(“1234567890”) 等同于 BigInt.apply(“1234567890”)
- 本语句会产生出新的BigInt实例
-
-
Scaladoc
Mac下建议使用DASH进行浏览
-
Scala也是支持闭包的,函数可以作为参数传入
-
s.count(p: (Char) => Boolean): Int
s.count(_.isUpper)
这是一种非常紧凑的定义,见12章
-
练习
-
第三题. res变量是val还是var
- 是val
-
第四题. 查找 StringOps 关键字
- “crazy”*3 记过是将crazy 重复3遍
第十题.takeXXXX和substring的区别是take不存在越界问题,只是尽量按照输入的数量来获取值,而substring 则如果越界则会抛异常