val*_*rry 5 getter setter overriding scala class
在scala中,类的用户在调用方法或使用val x = myclass.myproperty直接访问某个字段/成员之间没有区别.为了能够控制例如设置或获取字段,scala让我们覆盖_ =方法.但是=真的是一种方法吗?我很迷惑.
我们来看下面的代码:
class Car(var miles: Int)
var myCar = new Car(10)
println(myCar.miles) //prints 10
myCar.miles = 50
println(myCar.miles) //prints 50
Run Code Online (Sandbox Code Playgroud)
此代码也是如此(注意双空格myCar.miles = 50):
class Car(var miles: Int)
var myCar = new Car(10)
println(myCar.miles) //prints 10
myCar.miles = 50
println(myCar.miles) //still prints 50
Run Code Online (Sandbox Code Playgroud)
现在我想改变如何miles设置或读取的方式,例如总是在屏幕上打印一些东西.我怎么能这样做,以便我的类的用户不受影响,并且如果在=符号之前使用空格,它没有任何区别?
试试这个:
class Car(private var _miles: Int) {
def miles = _miles
def miles_=(m: Int): Unit = {
println("boo")
_miles = m
}
}
Run Code Online (Sandbox Code Playgroud)
空白并不重要.无论您插入多少空格,编译器都会看到您正在分配miles并将插入一个调用miles_=.
| 归档时间: |
|
| 查看次数: |
6403 次 |
| 最近记录: |