scala术语:
参数化:参数化的意思是在你创建实例的时候“设置”它。通过
把加在括号里的对象传递给实例的构造器的方式来用值参数化实例。
例如,下面的
Scala 代码实例化一个新的java.math.BigInteger并使用值"12345"参数化:
val big = new java.math.BigInteger("12345")
1.实例化对象或类实例
用new关键字。
2.如果方法仅带一个参数,你可以不带点或括号的调用它。
for (i <- 0 to 2)
print(greetStrings(i))
本例中的to实际上是带一个Int参数的方法。代码 0 to 2被
转换成方法调用(0).to(2)。 请注意这个语法仅在你显式指定方法调用的接受者时才起作
用。不可以写 pringln 10,但是可以写成“Console println 10”。
3.Scala里的操作符
从技术上讲,Scala 没有操作符重载,因为它根本没有传统意义上的操作符。取而代之的
是,诸如+,-,*和/这样的字符可以用来做方法名。因此,当第一步里你在Scala 解释器
里输入1 + 2,你实际上正在Int对象 1上调用一个名为+的方法,并把2当作参数传给它。
如图3.1 所示,你也可以使用传统的方法调用语法把1 + 2替代写成(1).+(2)。
4.为什么数组在 Scala 里是用括号访问的
与 Java比 Scala 很少有特例。数组和 Scala 里其他的类一样只是类的实现。当你在一个或多个值
或变量外使用括号时,Scala会把它转换成对名为apply的方法调用。于是greetStrings(i)
转换成greetStrings.apply(i)。所以Scala 里访问数组的元素也只不过是跟其它的一样
的方法调用。这个原则不仅仅局限于数组:任何对某些在括号中的参数的对象的应用将都
被转换为对apply 方法的调用。当然前提是这个类型实际定义过apply方法。所以这不是
一个特例,而是一个通则。
与之相似的是,当对带有括号并包括一到若干参数的变量赋值时,编译器将把它转化为对
带有括号里参数和等号右边的对象的update方法的调用。例如,greetStrings(0) = "Hello"
greetStrings.update(0, "Hello")
5.更好的创建并初始化数组的方法
val numNames = Array("zero", "one", "two")
或者 val numNames2 = Array.apply("zero", "one", "two")
前面介绍的方法:
val greetStrings = new Array[String](3)
greetStrings(0) = "Hello"
greetStrings(1) = ", "
greetStrings(2) = "world!\n"
6.scala的List
说到共享相同类型的不可变对象序列,Scala 的List 类才是。
7.在scala里创建一个List
创建一个List很简单:val oneTwoThree = List(1, 2, 3)
8.List有个叫“:::”的方法实现叠加功能。
val oneTwo = List(1, 2)
val threeFour = List(3, 4)
val oneTwoThreeFour = oneTwo ::: threeFour
println(oneTwo + " and " + threeFour + " were not mutated.")
println("Thus, " + oneTwoThreeFour + " is a new List.")
如果你执行这个脚本,你会看到:
List(1, 2) and List(3, 4) were not mutated.
Thus, List(1, 2, 3, 4) is a new List.
9.List最常用的操作符是发音为“cons”的‘::’。Cons 把一个新元素组合到已有List
的最前端,然后返回结果List。
若执行这个脚本:
val twoThree = list(2, 3)
val oneTwoThree = 1 :: twoThree
println(oneTwoThree)
你会看到:
List(1, 2, 3)
10.一个要记住的规则
如果一个方法被用作操作符标注,如a * b,那么方法被左操作数调用,就像a.*(b)――除非方法名以冒号结
尾。这种情况下,方法被右操作数调用。因此,1 :: twoThree 里,::方法被twoThree 调用,传入1,像这
样:twoThree.::(1)。
11.Nil关键字
定义空类的捷径是Nil。下面是初始化一个新的List的不错的方法:val oneTwoThree = 1 :: 2 :: 3 :: Nil