Що в Scala означає, що саме означає "val a: A = _" (підкреслення)?


Відповіді:


143

val a: A = _- помилка компіляції. Наприклад:

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

Що таке робота var a: A = _(примітка varзамість val). Як каже Чак у своїй відповіді, це ініціалізує змінну до значення за замовчуванням. Із специфікації мови Scala:

0, якщо T - Int або один із його піддіапазонів,
0L, якщо T - довгий,
0.0f, якщо T -
плаваючий , 0.0d, якщо T подвійний,
помилковий, якщо T булевий,
(), якщо T - одиниця,
недійсний для всіх інших типів Т.


6
Ха, приємний вилов на перемикач val / var. Мій мозок просто пробіг прямо повз нього.
Чак

2
Будь-яке розуміння того, чому це не було зроблено для роботи val?
Ерік Каплун

4
@ErikAllik: Це чисті спекуляції, але val a: Int = _це, мабуть, помилка компіляції, оскільки це було б поганою практикою, якби це працювало. Це був би просто придушений спосіб написання val a: Int = 0. Встановити varзначення за замовчуванням має сенс, оскільки varочікується зміна, але valфіксованим є, тому найкращою практикою було б присвоєння значення явно.
Shuklaswag

1
@Shuklaswag: Тільки якщо ви знаєте його ціле число. Я намагаюся використовувати це, щоб ініціалізувати вал типу, якого я ще не знаю.
Адріан, травень

33

Він ініціалізується aдо типового значення типу A. Наприклад, значення за замовчуванням Int дорівнює 0, а значення еталонного типу за замовчуванням - нульове.


10
Яке значення за замовчуванням класу, який змішується в NotNullознаці? :-)
Жан-Філіп Пеллет

9
@ Jean-PhilippePellet: Щодо Scala 2.9.0.1 (яка є найсвіжішою версією, яку я використав), типовим значенням класу, який змішується в ознаці NotNull, є - драматична пауза - null . Я думаю, що це, можливо, зміниться в якийсь момент, але наразі це здається _козирем NotNull.
Чак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.