有没有办法让参数变为var而不是val?

时间:2011-03-17 08:20:05

标签: scala command-line-arguments method-parameters

在Java中调试命令行参数处理时我习惯做

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

(如果您经常更改文件名作为参数,但不想在IDE中浏览某些对话框窗口,则特别有用)。这样做的好处是我可以在构建版本时简单地注释掉该行。

所以当我在Scala中尝试这个时,我发现参数是val。 (我不能在参数前面写var。)

  • Q1 :这是什么理由?
  • Q2 :除了做

    之外,有没有明显的解决方法
    val newArgs = if (...) args else Array("some", "new", "arguments")
    

    并在剩下的主要方法中坚持newArgs

3 个答案:

答案 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>