I have this rather simple question about Scala. Given that i have to following class definition:
class Foo(var bar: Int)
The code which is able to construct an instance of Foo must be able to pass the initial value for bar. But if I define bar as var the User is also able to change its value at runtime which is not what I want. The User should only be able to read bar. bar itself is modified internally so a val is not an option.
Read-only for a property is easy, just create a getter method without the corresponding setter. It’s also easy to make a private modifiable field.
Your biggest challenge here is the shared namespace, you want to be able to use the same name for:
Sadly, this is not possible, and you need a distinct name for each role… something like this:
If you’re not concerned about using named arguments, or with the name of the argument in Scaladoc, then this can be shortened even further:
UPDATE
The cleanest method, arguably, which gives you back named parameters is to combine a factory with one of the above techniques:
Which can then be called as
Bippy(42). Just the same as the regular constructor, but without thenewkeyword.