aioobe
aioobe

Reputation: 420951

Is there a way to let arguments be var instead of val?

When debugging command line argument handling in Java I'm used to doing

args = new String[] { "some", "new", "arguments" };

(especially useful if have a filename as argument which you frequently change, but don't want to go through some dialog windows in the IDE). This has the benefit that I can simply comment out the line when building a release.

So when I tried this in Scala I discovered that arguments are vals. (And I can't write var in front of the parameter).

Upvotes: 9

Views: 6726

Answers (3)

Colliot
Colliot

Reputation: 1551

If you only want to modify the args inside of the function, then your approach in the description is enough.

However, if you need to treat it as a true "reference" type and keep the modifications valid outside the function, you can wrap the arguments in a case class, e.g.:

case class Ref[A](var value: A)

And use it like:

def modify(refInt: Ref[Int]) = refInt.value = 3

Then, when you use refInt.value outside the function, it would still be 3.

Upvotes: 0

Raphael
Raphael

Reputation: 10549

Arrays are mutable, so if you insist:

Seq("some", "new", "arguments").copyToArray(args, 0, 3)

That does, of course, only work if there is enough space in the passed array.

Remember that you can use default parameters in Scala to solve your original probem in a much cleaner way.

Upvotes: 1

soc
soc

Reputation: 28423

Q1: Mutating the input parameters is often seen as bad style and makes it harder to reason about code.

Q2: You could assign the args to a var before doing anything with it.

Upvotes: 13

Related Questions