2010-02-24 105 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 */占位符评论的地方放置了一些东西。