Scala编程第3版第二章(入门)
2020-02-16 19:23:24    26    0    0
yuziyue


Scala的解释器执行结果被存在了类似 res0 的val值里面,可以再次调用 res0。

 

定义函数

def max(x: Int, y:Int): Int = {
    if (x > y) x
    else y
}

 Scala方法参数的一个重要特征是它们都是 val 而不是 var。

 

Scala脚本

在Scala 脚本中,args是一个字符串类型的数组,通过命令行传递进来的,下面的三种写法结果是相同的。

args.foreach(arg => println(arg))

args.foreach(println)

// 这里arg是val的,不能被重新赋值
for (arg <- args)
    println(arg)

 

数组

数组可变。定义指定类型、指定长度的数组,数组的访问方式是使用圆括号。Scala从技术上讲没有操作符重载,因为它实际上没有传统意义上的操作符概念。类似 +、-、*、/这样的字符可以被用作方法名。

// val greet: Array[String] = new Array[String](3)
val greet = new Array[String](3)
greet(0) = "Hello"
greet(1) = "World"
greet(2) = "!"
for (i <- 0 to 2)
    println(greet(i))

// 上面的 0 to 2 中, to实际上是一个接受一个Int参数的方法:(0).to(2)
// 所以下面的两种方式是等效的
1+2
(1).+(2)

 

当用一组圆括号将一个或多个值包起来,并将其应用到某个对象时,Scala会将这段代码转换成对这个对象的一个名为apply的方法的调用。所以 greetStrings(i) 会被转换成 greetStrings.apply(i)。当然,这样的代码仅在对象的类型实际上定义了apply方法时才能编译通过。而 greetStrings(0) = "Hello" 的赋值操作会被转换成 greetStrings.update(0, "Hello")

 数组的简单创建方法如下

 

val names = Array("zero", "one", "two")
等价于
val names = Array.apply("zero", "one", "two")


列表


List不可变。Scala的List只是不可变的,而Java的List是可变的,因为Scala的List被设计为允许函数式风格的编程 。


val oneTwoThree = List(1, 2, 3)


列表上常使用的操作 :: 读作 cons。它在一个已有列表的最前面添加一个新的元素,并返回这个新的列表。

val twoThree = List(1, 2)
val oneTwoThree = 1 :: twoThree
// 得到了 List(1, 2, 3)

1 :: twoThree 在这里来说,:: 是被调用的方法,twoThree是主调用方,1表示传入的参数,就像这样 twoThree.::(1)  。Nil表示一个空List




不可变集


这里的jetSet被重新赋值了,相当于 jetSet = jetSet + "Lear"。最后判断这个Set中是否包含字符串"Cessna"。

 

可变集


这里的 += 和上面的不同,这里 += 实际上是一个定义在可变集上的方法,相当于 movieSet.+=("Shrek")

 

不可变映射


 

 

可变映射


这里将会打印:Find big X on ground.

 

函数式编程风格


一种显著的标致是:使用 var 变量的通常是指令式编程(比如c、c++、Java),使用 val 常量的很可能是函数式编程。


读取文件


import scala.io.Source

if (args.length > 0){
    for (line <- Source.fromFile(args(0)).getLines())
        println(line.length + " " + line)
}
else
    Console.err.println("Please enter filename")

// Source.fromFile(args(0)).getLines() 返回的是一个迭代器
// 如果要保存到内存:var lines = Source.fromFile(args(0)).getLines().toList


上一篇: Scala编程第3版第四章(类和对象)

下一篇: Chrome 插件vimium快捷键

26 人读过
文档导航