Co dokładnie oznacza „val a: A = _” (podkreślenie) w Scali?


Odpowiedzi:


143

val a: A = _to błąd kompilacji. Na przykład:

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

Co działa to var a: A = _(uwaga varzamiast val). Jak mówi Chuck w swojej odpowiedzi, inicjalizuje to zmienną do wartości domyślnej. Ze specyfikacji języka Scala:

0, jeśli T jest Int lub jednym z jego typów podzakresów,
0L jeśli T jest Long,
0,0f jeśli T jest Float,
0,0d jeśli T jest Double,
false, jeśli T jest Boolean,
() jeśli T jest Unit,
null dla wszystkich innych typów T.


6
Ha, niezły zaczep na przełączniku val / var. Mój mózg właśnie przemknął obok niego.
Chuck

2
Jakieś wyjaśnienie, dlaczego nie zostało to stworzone do pracy val?
Erik Kaplun

4
@ErikAllik: To są czyste spekulacje, ale val a: Int = _prawdopodobnie jest to błąd kompilacji, ponieważ byłoby to zła praktyka, gdyby zadziałało. Byłby to po prostu zaciemniony sposób pisania val a: Int = 0. Ustawienie varwartości domyślnej ma sens, ponieważ varoczekuje się, że a ulegnie zmianie, ale wartość a valjest ustalona, ​​więc najlepszą praktyką byłoby jawne przypisanie wartości.
Shuklaswag

1
@Shuklaswag: Tylko jeśli znasz liczbę całkowitą. Próbuję użyć tego do zainicjowania wartości typu, którego jeszcze nie znam.
Adrian May

33

Inicjuje asię do domyślnej wartości typu A. Na przykład domyślną wartością Int to 0, a domyślną wartością typu odwołania jest null.


10
Jaka jest domyślna wartość klasy, która miesza NotNullcechę? :-)
Jean-Philippe Pellet

9
@ Jean-PhilippePellet: Począwszy od Scala 2.9.0.1 (która jest najnowszą wersją, z której korzystałem), domyślną wartością klasy, która miesza cechę NotNull jest - dramatyczna pauza - null . Spodziewam się, że w pewnym momencie to się zmieni, ale obecnie wydaje się, że to _atuty NotNull.
Chuck
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.