我不知道在不可变对象上叫什么叫"setter"?
对于一个可变对象Person,setter的工作方式如下:
class Person(private var _name: String) {
def name = "Mr " + _name
def name_=(newName: String) {
_name = newName
}
}
val p = new Person("Olle")
println("Hi "+ p.name)
p.name = "Pelle"
println("Hi "+ p.name)
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但如果Person是不可变的呢?
class Person(private val _name: String) {
def name = "Mr " + _name
def whatHereName(newName: String): Person = new Person(newName)
}
val p = new Person("Olle")
println("Hi "+ p.name)
val p2 = p.whatHereName("Pelle")
println("Hi "+ p2.name)
Run Code Online (Sandbox Code Playgroud)
应该whatHereName
叫什么?
编辑: 我需要把东西放在"setter"方法中,如下所示:
class Person(private val _name: String) {
def name = "Mr " + _name
def whatHereName(newName: String): Person = {
if(name.length > 3)
new Person(newName.capitalize)
else
throw new Exception("Invalid new name")
}
}
Run Code Online (Sandbox Code Playgroud)
真正的代码比这大得多,所以对copy
方法的简单调用是行不通的.
编辑2:
由于我的伪造例子有很多评论(这是不正确的)我最好给你真正的类()的链接Avatar
.
我不知道该叫什么的"二传手"方法updateStrength
,updateWisdom
......但我可能会withStrength
很快改变它.
Mik*_*erg 13
我喜欢jodatime的方式.这将是withName.
val p = new Person("Olle")
val p2 = p.withName("kalle");
Run Code Online (Sandbox Code Playgroud)
更多jodatime示例:http://joda-time.sourceforge.net/
归档时间: |
|
查看次数: |
1279 次 |
最近记录: |