DevilKing's blog

冷灯看剑,剑上几分功名?炉香无需计苍生,纵一穿烟逝,万丈云埋,孤阳还照古陵

0%

scala学习第二天

基本类型

Byte Short Int Long Char String Float Double Boolean

管道符号放在字符串前,并且调用stripMargin方法。

符号文本 Symbol 可以是任何字母或数字的标识符 ‘<标识符>

Int类带有+方法,所以为(1).+(2)

操作符和方法,操作符部分,采用后缀操作符标注方式

对象的相等性 == !=

富包装器 max min abs round

函数式对象

1
2
3
4
class Rational(n: Int, d: Int) {
require(d !=0)
override def toString = n +"/" + d
}

自指向: this

从构造器,

字母数字标识符, 操作符标识符

隐式转换

1
implicit def intToRational(x: Int) = new Rational(x)

内建控制结构

几乎所有的 Scala 的控制结构都会产生某个值

1
2
3
var filename = 
if(!args.isEmpty) args(0)
else "default.txt"

for + 过滤

1
2
3
val filesHere = (new java.io.File(".")).listFiles
for (file <- filesHere if file.getName.endsWith(".scala"))
println(file)
1
2
3
4
5
for (
file <- filesHere
if file.isFile;
if file.getName.endsWith(".scala")
) println(file)

for{子语句} yield {循环体}

match表达式替代switch case

没有break和continue

变量范围,注意重名

函数与闭包

first-class function, 不仅可以定义函数和调用它们,还可以将他们变成值传递。

占位符语法 _

偏应用函数

1
val b = sum (1, _: Int, 3)

函数文本在运行时创建的函数值(对象)被称为闭包,closure。源自于通过“捕获”
自由变量的绑定对函数文本执行的“关闭”行动。

重复参数

1
2
def echo(args: String*) = 
for(arg<-args) println(arg)

尾递归部分