Reputation: 420951
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 val
s. (And I can't write var
in front of the parameter).
Q2: So is there any obvious work-around except for doing
val newArgs = if (...) args else Array("some", "new", "arguments")
and stick to newArgs
in the remaining main method?
Upvotes: 9
Views: 6726
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
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
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