Em Scala, o que exatamente 'val a: A = _' (sublinhado) significa?


Respostas:


143

val a: A = _é um erro de compilação. Por exemplo:

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

O que funciona é var a: A = _(observe em varvez de val). Como Chuck diz em sua resposta, isso inicializa a variável para um valor padrão. Na especificação de idioma Scala:

0 se T for Int ou um de seus tipos de subintervalos,
0L se T for Longo,
0,0f se T for Flutuante,
0,0d se T for Duplo,
falso se T for Booleano,
() se T for Unidade,
nulo para todos os outros tipos T.


6
Ha, boa captura no switch val / var. Meu cérebro passou rapidamente por ele.
Chuck

2
Alguma idéia de por que isso não foi feito para funcionar val?
Erik Kaplun

4
@ErikAllik: Isso é pura especulação, mas val a: Int = _provavelmente é um erro de compilação, porque seria uma prática ruim se funcionasse. Seria apenas uma maneira ofuscada de escrever val a: Int = 0. Definir a varcomo um valor padrão faz sentido, pois varespera-se que a alteração seja alterada, mas a valé corrigida, portanto, a melhor prática seria atribuir um valor explicitamente.
Shuklaswag

1
@Shuklaswag: Somente se você souber que é um número inteiro. Estou tentando usar isso para inicializar um valor de um tipo que ainda não conheço.
11897 Adrian May

33

Inicializa acom o valor padrão do tipo A. Por exemplo, o valor padrão de um Int é 0 e o valor padrão de um tipo de referência é nulo.


10
Qual é o valor padrão de uma classe que mistura na NotNullcaracterística? :-)
Jean-Philippe Pellet

9
@ Jean-PhilippePellet: A partir do Scala 2.9.0.1 (que é a versão mais recente que usei), o valor padrão de uma classe que se mistura na característica NotNull é - pausa dramática - nula . Espero que isso provavelmente mude em algum momento, mas atualmente parece _trunfo NotNull.
Chuck
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.