2010-02-24 92 views
1

考慮下面的代碼中潛在的問題:斯卡拉2.8 - 與命名參數

// My code 
class Person(var age: Int) 

// Client's code 
object Main { 
    def main(args: Array[String]) { 
    val p = new Person(age = 18) 
    println(p.age) 
    } 
} 

現在說以後我需要定義爲age領域的訪問方法。

但是試圖做類似下面是不合法的字段名和方法名稱共享同一命名空間中的Scala:

// *** DOES NOT COMPILE *** 
// My code 
class Person(age: Int) { 
    def age = /* some code that gives integer */ 
} 

// Client's code 
object Main { 
    def main(args: Array[String]) { 
    val p = new Person(age = 18) 
    println(p.age) 
    } 
} 

所以我需要重命名或者構造函數的參數age或我的領域age。無論哪種方式,我將打破客戶端代碼,不是嗎?

是否有任何可能的解決方法?或者這是命名參數的固有問題?

請大家澄清一下。任何幫助將不勝感激。

謝謝。

回答

2

第二個代碼塊確實是編譯,只要你在/* some code that gives integer */佔位符評論的地方放置了一些東西。