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

6.9 定義操作符

Rational類目前實現的加法還算可行,但我們可以讓它更好用。你可能會問自己,為什么對于整數或浮點數,可以寫成:

但對于有理數,必須寫成:

或者至少是:

寫成這樣,并沒有很有說服力的原因。有理數不過是與其他數一樣的數。從數學意義上講,有理數甚至比浮點數更自然。為什么不可以用自然的算術操作符來操作有理數呢?Scala允許這樣做。在本章的剩余部分,我們將向你展示如何做到。

第一步是將add替換成通常的那個數學符號。這個做起來很直截了當,因為在Scala中,+是一個合法的標識符。我們可以簡單地定義一個名稱為+的方法,在這么做的同時,完全可以順手實現一個*方法,以執行乘法操作。結果如示例6.4所示。

示例6.4 帶有操作符方法的Rational

有了這樣的Rational類,可以寫出如下代碼:

與平時一樣,最后一行輸入的操作符語法等同于方法調用。也可以寫成:

不過這并不是那么可讀的。

另一個值得注意的點是,按照Scala的操作符優先級(在5.9節介紹過),對于Rational類來說,*方法會比+方法綁得更緊。換句話說,涉及Rational對象的+*操作,其行為會像我們預期的那樣。比如,x + x * y 會被當作x + (x * y)執行,而不是(x + x) * y

主站蜘蛛池模板: 西贡区| 米脂县| 郯城县| 城步| 陆川县| 凤冈县| 金秀| 太仆寺旗| 准格尔旗| 达日县| SHOW| 河北省| 张家川| 乌拉特前旗| 宜兰市| 淮安市| 九台市| 梓潼县| 神木县| 曲靖市| 孝感市| 伊金霍洛旗| 历史| 星座| 苍溪县| 广宗县| 工布江达县| 余干县| 延庆县| 牟定县| 五常市| 西畴县| 兴仁县| 宾阳县| 拜城县| 枣阳市| 云阳县| 平泉县| 方山县| 丹阳市| 鄄城县|