Suppose I have the following abstract class:
abstract class A (var is_happy : Boolean) {
def toggle_happiness();
}
And now I want to define a concrete class which implements the toggle_happiness() method:
class B (is_happy : Boolean) extends A (is_happy) {
def toggle_happiness() = {
is_happy = !is_happy
}
}
Scala’s compiler gives me:
error: reassignment to val
is_happy = !is_happy
^
What’s going on here? I thought that is_happy referred to a var in my class that is set by my constructor. Do I have a conflict with the name is_happy?
Thanks,
Dan
See this question. Essentially, Scala thinks that you’re trying to assign to the constructor parameter,
is_happy, rather than thevar,is_happy, which just happens to have the same name. Some solutions are to:varabstract in the base class._is_happy). Since parameter names are part of the public API of your constructors/methods, this may not be advisable.You’re fortunate that the problem was detected at compile time in your case. This issue can lead to very surprising runtime behavior when it goes undetected.