Answers:
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.
val
?
val a: Int = _
可能是编译错误,因为如果可行,这将是不好的做法。那只是一种模糊的写作方式val a: Int = 0
。将a设置var
为默认值是有意义的,因为var
预期a 会发生变化,但是a val
是固定的,因此最佳做法是显式分配一个值。