Разница между инициализацией подчеркивания var и val
Почему val x: Int = _ не компилируется, но var x: Int = _ делает?
Я получаю error: unbound placeholder parameter.
Ответ 1
В этом контексте _ означает "Я инициализирую это позже, просто заполните то, что разумное значение по умолчанию в это время". Поскольку вы не можете переназначить val, это не имеет смысла.
Для той же функциональности - для получения разумного значения по умолчанию - для val, вы можете использовать
val x: Int = null.asInstanceOf[Int]
Ответ 2
Вы не можете переназначить значение vals, поэтому вы не можете использовать _ (init со значением по умолчанию для предписанного типа) с ним. Но вы можете переназначить значение vars, поэтому логично инициализировать его с некоторым значением по умолчанию, например, в Java