9

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

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

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

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

  • Q1:这样做的理由是什么?
  • Q2:除了做之外,还有什么明显的解决方法吗?

    val newArgs = if (...) args else Array("some", "new", "arguments")
    

    并坚持newArgs剩下的主要方法?

4

3 回答 3

13

Q1:改变输入参数通常被认为是不好的风格,并且更难推理代码。

Q2:您可以在对它进行任何操作之前将其分配args给 a 。var

于 2011-03-17T08:22:37.590 回答
1

数组是可变的,所以如果你坚持:

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

当然,这只有在传递的数组中有足够的空间时才有效。

请记住,您可以在 Scala 中使用默认参数以更简洁的方式解决原始问题。

于 2011-03-17T12:12:50.910 回答
0

如果您只想修改函数内部的参数,那么您在描述中的方法就足够了。

但是,如果您需要将其视为真正的“引用”类型并保持修改在函数外部有效,您可以将参数包装在案例类中,例如:

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

并像这样使用它:

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

然后,当你refInt.value在函数外使用时,它仍然是 3。

于 2017-10-07T20:14:10.390 回答