Попробуйте
class Robot {
var name : String = randomName()
def randomName() = {
val chars = ('A' to 'Z' )
var num = 100 + Random.nextInt(899)
var sb = new StringBuilder
for (i <- 1 to 2 ) {
sb.append(chars(scala.util.Random.nextInt(chars.length)))
}
sb.append(num)
sb.toString()
}
def reset(): String = {
name = randomName()
name
}
}
Обратите внимание, что name
не изменяется при последующем доступе, несмотря на то, что ему назначен метод var name : String = randomName()
:
val robot = new Robot()
robot.name // res0: String = RV417
robot.name // res1: String = RV417
robot.name // res2: String = RV417
Это потому, что var
значение запоминается, то есть оно кэшируется после первой инициализации.Тем не менее, мы все еще можем изменить значение var
, принудительно переназначая его так:
def reset(): String = {
name = randomName()
name
}
, который выдает
val robot = new Robot()
robot.name // res0: String = OE770
robot.reset()
robot.name // res2: String = PI287