在Scala中,“ val a:A = _”(下划线)到底是什么意思?


Answers:


143

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

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

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

如果T为Int或其子范围类型之一,则为0;
如果T为Long
则为0L;如果T为Float
则为0.0f;如果T为Double则为0.0d;
如果T为Boolean则为false;
如果T为Unit则为(n);
对于所有其他类型,则为null T.


6
哈,在val / var开关上不错。我的大脑刚刚掠过它。
查克(Chuck)

2
关于为什么没有使用它的任何见解val
埃里克·卡普伦2014年

4
@ErikAllik:这纯粹是推测,但val a: Int = _可能是编译错误,因为如果可行,这将是不好的做法。那只是一种模糊的写作方式val a: Int = 0。将a设置var为默认值是有意义的,因为var预期a 会发生变化,但是a val是固定的,因此最佳做法是显式分配一个值。
Shuklaswag's

1
@Shuklaswag:仅当您知道其为整数时。我正在尝试使用它来初始化我不知道的类型的val。
阿德里安

33

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


10
NotNull特征中混合的类的默认值是多少?:-)
让-菲利普·佩莱

9
@让PhilippePellet:作为斯卡拉2.9.0.1(这是我用过的最新版本),一类是在NOTNULL特点是混合的默认值-戏剧性的沉默- 。我希望这可能会在某个时候改变,但目前看来是_王牌NotNull
查克(Chuck)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.