第三章 scala入门再探

最后更新于:2022-04-01 20:15:38

- 类型参数化数组 ~~~ val arr = new Array[String](3); arr(0) = "Hello"; arr(1) = ","; arr(2) = "World"; ~~~ ~~~ 这里的arr(0) = "Hello";将被转化为arr.update(0,"Hello");即函数的调用 ~~~ - 使用列表 1. Scala是可变的同类对象序列,而不可变的同类对象序列是列表类; `val lst = List(1, 2, 3);` 1. 列表本身不可变 1. 提供方法 ::: 实现叠加功能 ~~~ val fstList = List(1, 2); val sndList = List(3, 4); val trdList = fstList ::: sndList; println(trdList) ~~~ ~~~ 结果: ~~~ ~~~ List(1, 2, 3, 4) ~~~ 提供方法 :: 将新元素组合到现有列表的最前端,产生新列表作为结果返回; 空列表简写为: Nil - 元组 元组是不可变的; 元组可以包含不同类型的元素; val pair = (6299, “iPad Pro”); 用方法 _数字(从1开始) 访问元组的组元 pair _1 //结果:6299 为什么不能用访问列表的方法来访问元组? 因为列表的apply方法始终返回同样的类型,但元组里的类型不尽相同。所以访问方法也不一样。 列表的索引脚标是基于0的,而元组则是基于1的(Haskell和ML等含有静态类型元组的语言,从1开始是传统的设定)。 - 集(set)和映射(map) Scala的集合库区分为可变类型和不可变类型; - Set Scala API 中提供了一个set的基本特质,还提供了两个子特质,分为可变和不可变; ~~~ var jetSet = Set("Scala", "Program"); jetSet += "GO"; ~~~ ~~~ jetSet是默认的不可变集,初始化为包含了两个字符串的集,创建set的方法和创建list和array的类似,通过其伴生对象的apply工厂方法。 方法 + 对于不可变集来说,会产生一个全新集,对可变集来说则是把元素加入自身。 ~~~ - Map 与set类似; ~~~ import scala.collection.mutable.Map val map = Map[Int, String](); map += (1,"one"); map += (2, "two"); ~~~ ~~~ map也可表示为 (1 -> "one"); 键值对,访问map(k)得到相应的value; ~~~ - 函数式风格 多练习Scala集合库中的方法对体会函数式编程风格很有帮助; 崇尚val,不可变对象和没有副作用的方法; - 从文件中读取文本行 引用scala.io的Source类 方法 getLine 返回Iterator[String]
';