如果我定义了变量b val b:B
。每次将b分配给新值时,是否可以打印b
的值。像下面的代码:
case class B(name:String) {
}
var b = B("123")
b = B("xxx")
println(s"b is changed to $b")
b = B("xxJJx")
println(s"b is changed to $b")
我希望在创建println(s"b is changed to $b")
或B
时将代码b
隐藏在某种宏中,例如:
var b = macro_wrap(B("123"))
答案 0 :(得分:0)
使用普通var
,您将无法做到。
您可以得到的最接近的方法是从外部创建一个看起来像var
的getter-setter对:
object Stuff {
private var b0 = B("123")
def b: B = b0
def b_=(newb: B): Unit = {
b0 = newb
println(s"b is changed to $newb")
}
}
然后:
Stuff.b = B("xxx")
将打印新值。
请注意,setter是一个名为b_=
的方法,Scala编译器对其进行了特殊处理-赋值Stuff.b = B("xxx")
被自动转换为Stuff.b_=(B("xxx"))
。仅在setter附带吸气剂的情况下才有效。