What exactly does val a: A = _
initialize a value to? Is this a typed null? Thanks.
val a: A = _
is a compile error. For example:
scala> val a: String = _
<console>:1: error: unbound placeholder parameter
val a: String = _
^
What does work is var a: A = _
(note var
instead of val
). As Chuck says in his answer, this initialises the variable to a default value. From the Scala Language Specification:
0 if T is Int or one of its subrange types, 0L if T is Long, 0.0f if T is Float, 0.0d if T is Double, false if T is Boolean, () if T is Unit, null for all other types T.
It initializes a
to the default value of the type A
. For example, the default value of an Int is 0 and the default value of a reference type is null.
NotNull
trait? :-)
_
trumps NotNull
.
Success story sharing
val
?val a: Int = _
is probably a compilation error because it would be bad practice if it worked. It would just be an obfuscated way of writingval a: Int = 0
. Setting avar
to a default value makes sense since avar
is expected to change, but aval
is fixed so best practice would be to assign a value explicitly.