【问题标题】:Scala App args can't be valScala App args 不能是 val
【发布时间】:2017-11-22 15:22:36
【问题描述】:

我有以下 Scala 2.12.x 代码:

object Myapp extends App {
  val bootstrapper = new Bootstrapper()
  val config = bootstrapper.bootstrap(args)
}

class Bootstrapper {
  def bootstrap(val args : Array[String]) : Config = {
    null
  }
}

以上内容在我的Bootstrapper 类中导致编译器错误,抱怨argsval

identifier expected but 'val' found.

当我将 val args : Array[String] 更改为 args : Array[String] 时,编译器错误消失了。 为什么?

【问题讨论】:

  • 即使您删除了 val,您的示例也不应该编译。因为方法名称“bootstrap”不是构造函数。您需要将其重命名为“应用”
  • 啊!抱歉@BogdanVakulenko (+1) 这只是一个复制和粘贴错误,请查看我的更新。

标签: scala


【解决方案1】:

在 Scala 中,方法参数始终是 val,这与在 Java 中您必须将它们显式标记为 final 不同。这就是为什么将方法参数标记为val 不是语法的一部分。

【讨论】:

  • 谢谢@Jasper-M (+1),是否可以将方法参数标记为var
  • @smeeb 这是不可能的。无论如何,为方法参数分配新值也不是很好的做法,Scala 甚至不允许这样做。
  • 即使可以将它们分配为var,它也不会改变任何东西,因为 Java 和 Scala 都是 paas-by-value wrt 变量。
  • 它会改变这样一个事实,即您可以为方法内部的参数分配一个新值,就像在 Java 中一样...不是您应该这样做。
猜你喜欢
  • 2012-02-23
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
相关资源
最近更新 更多