Как я выразил бы следующий код Java в scala?
a = b = c;
Между прочим, я повторно присваиваю переменные (не объявление).
Ближайший синтаксис сокращения в Scala можно использовать только при объявлении var
или val
.
scala> val c = 1
c: Int = 1
scala> val a, b = c
a: Int = 1
b: Int = 1
Из справочника по Scala, раздел 4.1
Объявление значения val x1 , ... , xn: T - это сокращение для последовательности деклараций значений val x1: T ; ...; val xn: T. Определение значения val p1, ..., pn = e - это сокращение для последовательности значений definitions val p1 = e ; ...; val pn = e . A value definition val p1, ... , pn : T = e - это сокращение для последовательность дефиниций значений val p1 : T = e ; ...; val pn: T = e .
Это не работает для переназначения на var
. Стиль C/Java не работает по причинам, объясненным здесь: What is the Motivation for Scala Assignment Evaluating to Unit
val b = c
val a = b
Вы не можете написать
val a = b = c
так как это определяет выражение
«Тип возврата» выражения (присваивание) b = c
- Unit
, я боюсь, это означает, что этот синтаксис недействителен.
b = c; a = b
Неудобно, я знаю. Это Scala практически говорит вам "не делай этого". Считайте, что это Scala-версия Python'овской идентификации пространства для разграничения блоков.