scala 当特征中的值被设置时触发某个方法

o4tp2gmn  于 2022-11-23  发布在  Scala
关注(0)|答案(2)|浏览(111)

有以下特点:

Trait Example{

    val foo : String
}

然后从另一个使用Example I的类中设置foo =“bar”。有没有简单的方法,例如在设置该值时执行print(foo)或执行其他函数?最好不要触及赋值,只需在trait类中编写代码。
我尝试的选项需要将foo作为一个函数,然后以不同的方式调用它,所以我不确定什么是最好的方法。

j7dteeu8

j7dteeu81#

因此,从foo是抽象的和不可变的这一事实来看,我将假设“uses Example”是指一个子类,而“I set foo = "bar", you mean setting the value of a variable in constructor, not trying to mutate it on an instance (which wouldn't work since it's a瓦尔"是指一个子类。
就像这样,对吧?

class Foo extends Example { 
  val foo = "foo"
}

现在你似乎想截取这个“赋值”并打印出这个值。
首先,请注意,由于它是不可变的(也称为“常量”),因此只能在构造示例时对其赋值一次。因此,您可以编写如下代码:

class Foo extends Example { 
   print("Assigning foo to foo") 
   val foo = "foo"
}

或者,如果希望值是动态的,可以执行以下操作:

class Bar(x: String) extends Example { 
    println(s"Assigning $x to foo") 
    val foo = "foo"
}

或者只是这样:

case class Baz(foo: String) extends Example { 
   println(s"Assigned $foo to foo")
}
toe95027

toe950272#

Okay找到了一个直接的方法(尽管它确实让我改变了所有的赋值):

lazy val foo : String = ""
print(foo)

然后在每次赋值重写中使用lazy瓦尔foo =“bar,”那么它将在设置值后直接打印。
然而,我不确定这是否是一个“适当”的方式来做到这一点。

相关问题