- Scala編程(第5版)
- (德)馬丁·奧德斯基等
- 433字
- 2022-05-06 15:51:47
6.12 擴展方法
現在你已經可以寫r * 2,但是你可能還想交換兩個操作元的位置,即2 * r。很遺憾,這樣還不行:

這里的問題是2 * r等價于2.*(r),因此這是一個對2這個整數的方法調用。但Int類并沒有一個接收Rational參數的乘法方法(它無法有這樣一個方法,因為Rational類并不是Scala類庫中的標準類)。
不過,Scala有另外一種方式來解決這個問題:可以為Int類創建一個接收有理數的擴展方法。可以向編譯器里添加行:

這將會為Int類定義4個擴展方法,每個擴展方法都接收Rational參數作為入參。編譯器可以在若干場合自動選用這些方法。有了這些擴展方法的定義,就可以重新嘗試之前失敗的示例:

為了讓擴展方法能夠正常工作,要求它在作用域內。如果你將擴展方法的定義放在Rational類內部,則對編譯器而言,擴展方法并沒有在作用域內。就目前而言,你需要在編譯器中直接定義擴展方法。
就像從示例中看到的那樣,擴展方法是讓類庫變得更靈活、更便于使用的強大技巧。由于它非常強大,因此很容易被濫用。你會在第22章找到更多關于擴展方法的細節,包括如何在需要時將它引入作用域內。
推薦閱讀
- 單片機C語言程序設計實訓100例:基于STC8051+Proteus仿真與實戰
- Learning RabbitMQ
- Getting Started with CreateJS
- Java面向對象程序開發及實戰
- Java性能權威指南(第2版)
- Advanced Oracle PL/SQL Developer's Guide(Second Edition)
- Getting Started with Greenplum for Big Data Analytics
- 大數據分析與應用實戰:統計機器學習之數據導向編程
- ASP.NET程序開發范例寶典
- Odoo 10 Implementation Cookbook
- Python期貨量化交易實戰
- Java 從入門到項目實踐(超值版)
- OpenCV Android開發實戰
- IPython Interactive Computing and Visualization Cookbook
- Tkinter GUI Programming by Example