27. 缺省参数缺省参数 (default arguments)(default arguments)
►缺省参数的一个适用场景:提供缺省参数的一个适用场景:提供 copycopy 方法时方法时
scala> class A(val a:String,val b:String) {scala> class A(val a:String,val b:String) {
def copy(a:String="AAA",b:String="BBB") = new A(a,b)def copy(a:String="AAA",b:String="BBB") = new A(a,b)
}}
scala> val a = new A("a","b")scala> val a = new A("a","b")
scala> val b = a.copy()scala> val b = a.copy()
scala> b.ascala> b.a
res3: String = AAAres3: String = AAA
case classcase class 里的里的 copycopy 方法是由编译器生成的,使用了缺省参数。方法是由编译器生成的,使用了缺省参数。
29. CTMCTM 中定义的中定义的 66 种传值方式种传值方式
11 Call by referenceCall by reference
22 Call by varible //1Call by varible //1 的特例的特例
33 Call by value-result //2Call by value-result //2 的变种的变种
44 Call by valueCall by value //Java//Java 中只支持这一种中只支持这一种
55 Call by nameCall by name //Scala//Scala 中支持中支持
66 Call by needCall by need //5//5 的变种的变种
注:注:
1)1) 引用自:引用自: http://blog.csdn.net/sunqihui/article/details/5597995http://blog.csdn.net/sunqihui/article/details/5597995
2) CTM:2) CTM: 《计算机编程的概念、技术与模型》《计算机编程的概念、技术与模型》 http://book.douban.com/subject/1782316/http://book.douban.com/subject/1782316/
33. 传值还是传名传值还是传名
►1) by name1) by name 传递只出现在函数参数中传递只出现在函数参数中
►2)2) 同上,同上, =>R=>R 类型只能出现在函数参数中类型只能出现在函数参数中
表示表示 by name parameterby name parameter
►3) => R3) => R 不能单纯看作是不能单纯看作是 ()=>R()=>R 的缩写,两的缩写,两
者传递形式不同者传递形式不同
58. 一些谜题一些谜题
Unit 的问题:
val a = () => Unit // aval a = () => Unit // a 是什么类型?是什么类型?
val b = () => {} //val b = () => {} // 有什么不同?有什么不同?
注意:第一个匿名函数中的注意:第一个匿名函数中的 UnitUnit 是伴生对象是伴生对象