Scala编程(第4版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

6.14 结语

在本章,你看到了有关Scala类的更多内容,了解了如何给类添加参数,如何定义多个构造方法,如何像定义方法那样定义操作符,以及如何定制化类让它们用起来更自然。可能最为重要的一点,你应该已经意识到在Scala中定义和使用不可变对象是很自然的一种编程方式。

虽然本章展示的最后一个版本的Rational满足了章节开始时设定的需求,但是它仍然有提升空间。事实上在本书后面的章节还会重新回顾这个示例。比方说,在第30章,你将了解到如何重写equalshashCode方法,让Rational可以更好地参与==的比较或者被存入哈希表的场景。在第21章,你将了解到如何把隐式的方法定义放到Rational的伴生对象中,让使用Rational的程序员更容易获取到这些隐式转换。

[1]require方法定义在Predef这个独立对象中。如4.4节所讲的,所有的Scala源文件都会自动引入Predef的成员。

[2]实际上,可以把Rational跟自己相加,这时that会指向执行add调用的那个对象。但由于你可以传入任何Rational对象到add方法,编译器仍然不允许你用that.n。

[3]在10.6节你将找到更多关于参数化字段(parametric field)的内容,提供了同样代码的简写方式。

[4]尽管n和d在类定义体中被使用,由于它们只出现在构造方法中,Scala编译器并不会为它们生成字段。因此,对这样的代码,Scala编译器将会生成一个带有两个Int字段的类,两个字段分别是numer和denom。

[5]这种风格的标识符命名方式被称作驼峰命名法(camel case),是因为标识符内的那些间隔出现的大写字母就像是骆驼背上的驼峰一样。

[6]在16.5节,你将了解到有时候可能需要完全用操作字符来对样例类(case class)命名。例如,Scala的API包含一个名为::的类,用于实现对List的模式匹配(pattern matching)。

[7]更准确地说,操作字符包括Unicode中数学符号(Sm)或其他符号(So),以及ASCII码表中除字母、数字、圆括号、方括号、花括号、单引号、双引号、下画线、句点、分号、逗号、反引号(back tick)之外的7位(7-bit)字符。