有以下特点:
Trait Example{ val foo : String }
然后从另一个使用Example I的类中设置foo =“bar”。有没有简单的方法,例如在设置该值时执行print(foo)或执行其他函数?最好不要触及赋值,只需在trait类中编写代码。我尝试的选项需要将foo作为一个函数,然后以不同的方式调用它,所以我不确定什么是最好的方法。
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瓦尔"是指一个子类。就像这样,对吧?
foo
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") }
toe950272#
Okay找到了一个直接的方法(尽管它确实让我改变了所有的赋值):
lazy val foo : String = "" print(foo)
然后在每次赋值重写中使用lazy瓦尔foo =“bar,”那么它将在设置值后直接打印。然而,我不确定这是否是一个“适当”的方式来做到这一点。
2条答案
按热度按时间j7dteeu81#
因此,从
foo
是抽象的和不可变的这一事实来看,我将假设“uses Example”是指一个子类,而“I setfoo = "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
瓦尔"是指一个子类。就像这样,对吧?
现在你似乎想截取这个“赋值”并打印出这个值。
首先,请注意,由于它是不可变的(也称为“常量”),因此只能在构造示例时对其赋值一次。因此,您可以编写如下代码:
或者,如果希望值是动态的,可以执行以下操作:
或者只是这样:
toe950272#
Okay找到了一个直接的方法(尽管它确实让我改变了所有的赋值):
然后在每次赋值重写中使用lazy瓦尔foo =“bar,”那么它将在设置值后直接打印。
然而,我不确定这是否是一个“适当”的方式来做到这一点。