官术网_书友最值得收藏!

6.14 結語

在本章,你看到了有關Scala類的更多內容,了解了如何給類添加參數,如何定義多個構造方法,如何像定義方法那樣定義操作符,以及如何定制化類以讓其用起來更自然。最為重要的一點可能是,你應該已經意識到在Scala中定義和使用不可變對象是很自然的一種編程方式。

雖然本章展示的最后一個版本的Rational類滿足了章節開始時設定的需求,但是它仍然有提升空間。事實上,在本書后面的章節還會重新回顧這個示例。比如,在第8章,你將了解到如何重寫equalshashCode方法,讓Rational類可以更好地參與==的比較或者被存入哈希表的場景;在第22章,你將了解到如何把擴展方法的定義放到Rational類的伴生對象中,讓使用Rational類的程序員更容易地將它放到作用域內。

[1]require方法定義在Predef這個獨立對象中。如4.5節所講的,所有的Scala源文件都會自動引入Predef對象的成員。

[2]實際上,可以把Rational對象與自己相加,這時that會指向執行add方法調用的那個對象。但由于你可以傳入任何Rational對象到add方法中,因此編譯器仍然不允許使用that.n。

[3]你將在10.6節找到更多關于參數化字段(parametric field)的內容。該內容提供了同樣功能的代碼的簡寫方式。

[4]雖然n和d在類定義體中被使用,但是由于它們只出現在構造方法中,Scala編譯器并不會為它們生成字段,因此,對于這樣的代碼,Scala編譯器將會生成一個帶有兩個Int字段的類,且兩個字段分別是numer和denom。

[5]這種風格的標識符命名方式被稱作駝峰命名法,是因為標識符內的那些間隔出現的大寫字母就像是駱駝背上的駝峰一樣。

[6]在14.5節,你將了解到有時候可能需要完全用操作符來對樣例類命名。例如,Scala的API包含一個名稱為::的類,用于實現對List的模式匹配。

[7]更準確地說,操作符包括Unicode中的數學符號(Sm)或其他符號(So),以及ASCII碼表中除字母、數字、圓括號、方括號、花括號、單引號、雙引號、下畫線、句點、分號、逗號、反引號(back tick)之外的7位(7-bit)字符。

主站蜘蛛池模板: 灵台县| 凯里市| 随州市| 黄平县| 苍山县| 东乌珠穆沁旗| 东兰县| 巴林左旗| 普兰县| 清水河县| 高密市| 九龙坡区| 双城市| 喜德县| 墨竹工卡县| 大竹县| 汾西县| 石首市| 丰都县| 于田县| 吕梁市| 武强县| 磐石市| 儋州市| 凤山县| 全椒县| 寿光市| 凭祥市| 舟山市| 广河县| 雅安市| 将乐县| 壶关县| 靖远县| 巩留县| 信宜市| 济宁市| 镇安县| 建德市| 郸城县| 武清区|