Scala学习笔记 -- 入门(二)
7.参数化
//值参数化
val big = new java.math.BigInteger("12345")
//类型参数化
val greetStrings = new Array[String](3)
greetStrings(0) = "Hello"
greetStrings(1) = ", "
greetStrings(2) = "world!\n"
for (i <- 0 to 2)
println(greetStrings(i))
//apply方法调用
val res = 1 + 2
val res = (1).+(2)
//update方法调用
greetStrings(0) = "Hello"
greetStrings.update(0, "Hello")
8.列表
//创建初始化一个列表
val oneTwoThree = List(1, 2, 3)
//列表拼接
val oneTwo = List(1, 2)
val twoThree = List(2, 3)
val threeFour = List(3, 4)
val oneTwoThreeFour = oneTwo ::: threeFour
val oneTwoThree = 1 :: twoThree
// twoThree.::(1)
val oneTwoThree = 1 :: 2 :: 3 ::Nil
9.元组
val pair = (99, "Luftballons")
println(pair._1)
println(pair._2)
10.集与映射
Scala提供了两个子特质,一个用于表示可变集,一个用于表示不可变集。
// 创建、初始化及使用不可变集
var jetSet = Set("Boeing", "Airbus")
jetSet += "Lear"
println(jetSet.contains("Cessna"))
//创建、初始化及使用可变集
import scala.collection.mutable
val movieSet = mutable.Set("Hitch" ,"Poltergeist")
movieSet += "Shrek"
println(movieSet)
//创建 初始化及使用一个不可变HashSet
import scala.collection.immutable.HashSet
val hashSet = HashSet("Tomatoes" ,"Chilies")
println(hashSet + "Coriander")
//创建 初始化及使用一个可变映射
import scala.collection.mutable
val treasureMap = mutable.Map[Int, String]
treasureMap += (1 -> "Go to island.")
treasureMap += (2 -> "Find big X on ground.")
treasureMap += (3 -> "Dig.")
println(treasureMap(2))
def formatArgs(args:Array[String]) = args.mkString("\n")
val res = formatArgs(Array("zero", "one", "two"))
assert(res == "zero\none\ntwo")
11.文件操作
//引入scala.io包中Source类
import scala.io.Source
def widthOfLength(s:String) = s.length.toString.length
if(args.length > 0){
/*
toList是必需的,因为getLines()方法返回的是一个迭代器iteration,一旦完成遍历,迭代器就会被消耗掉。通过toList将它转化为List,即可通过内存存储所有行。
*/
val lines=Source.fromFile(args(0)).getLines().toList
/*
reduceLeft方法将传入的函数应用到lines的头两个元素,然后继续将这个传入的函数应用到前一步得到的值和lines中的下一个元素,直到遍历完整个列表后,reduceLeft将返回传入函数的最后一次执行结果。
*/
val longestLine = lines.reduceLeft(
(a,b) => if (a.length > b.length) a else b
)
val maxWidth = widthOfLength(longestLine)
for (line <- lines){
val numSpaces = maxWidth - widthOfLength(line)
val padding = " " *numSpaces
println(padding + line.length + " | " + line)
}
}
else
Console.err.println("Please enter filename: ")