前言 :
Scala 是一個可直譯、編譯、靜態、運行於 JVM 之上、可與 Java 互操作、融合物件導向編程特性與函式編程風格的程式語言. Scala 本身具有擴充性,不過這必須了解更多語法特性與細節. Scala 建構式有些限制,使用方法可以定義所謂運算子(Operator),提供語法蜜糖與存取方法.
屬性存取方法 :
如果你如下定義一個類別 :
- class Ball {
- var radius = 10.0
- }
- val ball = new Ball
- ball.radius = 20.0
- println(ball.radius) // 顯示 20.0
- public class Ball {
- private double radius = 10.0;
- public void setRadius(double radius) {
- if(radius < 0) {
- throw new IllegalArgumentException("不能是負數");
- }
- this.radius = radius;
- }
- public double getRadius() {
- return radius;
- }
- }
private [X] 中的 X 是 Scala 為 protected 及 private 所提供的修飾詞(Qualifier),用以提供更細部的可視範圍(Scope)修飾。 private[this] 表示所宣告的變數,只能在類別定義中被存取,任何實例化物件時再存取該屬性的動作都不允許,例如 :
- class Some {
- private[this] var data = "XD"
- def doSome(s: Some) = data + s.data // 錯誤,不可以使用s.data存取
- }
屬性存取方法並不一定得有對應的內部資料成員,也可以是計算的結果。例如 :
上例中,實際上並沒有 volume 對應的內部資料成員,而是將計算對應至 r 或者是從 r 計算出 volume.
Supplement
* Tutorialspoint - Scala Access Modifiers
* Scala access modifiers and qualifiers in detail
沒有留言:
張貼留言