【问题标题】:In Scala, what exactly does 'val a: A = _' (underscore) mean?在 Scala 中,'val a: A = _'(下划线)究竟是什么意思?
【发布时间】:2011-12-01 04:45:00
【问题描述】:

val a: A = _ 究竟将值初始化为什么?这是键入的 null 吗?谢谢。

【问题讨论】:

标签: scala initialization


【解决方案1】:

val a: A = _ 是编译错误。例如:

scala> val a: String = _
<console>:1: error: unbound placeholder parameter
       val a: String = _
                       ^

起作用的是var a: A = _(注意var 而不是val)。正如 Chuck 在他的回答中所说,这会将变量初始化为默认值。来自 Scala 语言规范:

0 如果 T 是 Int 或其子范围类型之一,
如果 T 很长,则为 0L,
0.0f 如果 T 是浮点数,
如果 T 为 Double,则为 0.0d,
如果 T 是布尔值,则为 false,
() 如果 T 是单位,
所有其他类型 T 为 null。

【讨论】:

  • 哈,很好地抓住了 val/var 开关。我的大脑刚刚掠过它。
  • 任何关于为什么这不能与val一起工作的见解?
  • @ErikAllik:这纯粹是推测,但val a: Int = _ 可能是一个编译错误,因为如果它有效,那将是不好的做法。这只是写val a: Int = 0 的一种混淆方式。将var 设置为默认值是有意义的,因为var 预计会发生变化,但val 是固定的,因此最佳做法是显式分配值。
  • @Shuklaswag:只有当你知道它是一个整数时。我正在尝试使用它来初始化我还不知道的类型的 val。
【解决方案2】:

它将a 初始化为A 类型的默认值。例如,Int 的默认值为 0,引用类型的默认值为 null。

【讨论】:

  • NotNull trait 中混合的类的默认值是多少? :-)
  • @Jean-PhilippePellet:从 Scala 2.9.0.1(这是我使用的最新版本)开始,混入 NotNull 特征的类的默认值是——戏剧性的停顿——空。我预计这可能会在某个时候改变,但目前看来_ 胜过NotNull
猜你喜欢
  • 2015-12-30
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2020-02-15
  • 2011-03-12
  • 1970-01-01
  • 2015-04-11
相关资源
最近更新 更多