在Java中调试命令行参数处理时我习惯做
args = new String[] { "some", "new", "arguments" };
(如果您经常更改文件名作为参数,但不想在IDE中浏览某些对话框窗口,则特别有用)。这样做的好处是我可以在构建版本时简单地注释掉该行。
所以当我在Scala中尝试这个时,我发现参数是val
。 (我不能在参数前面写var
。)
Q2 :除了做
之外,有没有明显的解决方法val newArgs = if (...) args else Array("some", "new", "arguments")
并在剩下的主要方法中坚持newArgs
?
答案 0 :(得分:13)
Q1:改变输入参数通常被认为是糟糕的风格,并且更难以推理代码。
Q2:您可以在对args
进行任何操作之前将var
分配给{{1}}。
答案 1 :(得分:1)
阵列是可变的,所以如果你坚持:
Seq("some", "new", "arguments").copyToArray(args, 0, 3)
当然,只有在传递的数组中有足够的空间时才能工作。
请记住,您可以使用Scala中的默认参数以更清晰的方式解决原始探测。
答案 2 :(得分:0)
如果您只想修改函数内部的args,那么您在描述中的方法就足够了。
但是,如果您需要将其视为真实的"参考"键入并保持修改在函数外部有效,您可以将参数包装在案例类中,例如:
case class Ref[A](var value: A)
并使用它:
def modify(refInt: Ref[Int]) = refInt.value = 3
然后,当你在函数外使用refInt.value
时,它仍然是3。</ p>