在Scala中,'val a:A = _'(下划线)究竟是什么意思?

Gre*_*idt 115 scala initialization

究竟是什么val a: A = _初始化了一个值?这是一个打字的空吗?谢谢.

Pau*_*her 140

val a: A = _是一个编译错误.例如:

scala> val a: String = _
<console>:1: error: unbound placeholder parameter
       val a: String = _
                       ^
Run Code Online (Sandbox Code Playgroud)

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

0如果T是Int或其子范围类型之一,
如果T为Long
则为0L,如果T为
Flo ,则为0.0f,如果T为Double则为0.0d,
如果T为布尔值则为假,
()如果T为Unit,
则为(),对于所有其他类型为null T.

  • 哈,很好的捕获val/var开关.我的大脑刚刚掠过它. (5认同)
  • @ErikAllik:这是纯粹的推测,但是`val a:Int = _`可能是一个编译错误,因为如果它起作用将是不好的做法.它只是一种编写`val a:Int = 0`的混淆方式.将`var`设置为默认值是有意义的,因为预期`var`会改变,但是`val`是固定的,所以最佳做法是明确地赋值. (4认同)
  • 任何洞察为什么没有使用`val`? (2认同)

Chu*_*uck 32

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

  • 混合在"NotNull"特征中的类的默认值是多少?:-) (10认同)
  • @ Jean-PhilippePellet:从Scala 2.9.0.1(这是我使用过的最新版本)开始,混合NotNull特征的类的默认值是 - 戏剧性暂停 - **null**.我希望这可能会在某些时候发生变化,但目前似乎`_`胜过'NotNull`. (9认同)