Как я выразил бы цепочечное присвоение в Scala?

Как я выразил бы следующий код Java в scala?

a = b = c;

Между прочим, я повторно присваиваю переменные (не объявление).

8
задан someguy 14 March 2010 в 15:07
поделиться

4 ответа

Ближайший синтаксис сокращения в 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

13
ответ дан 5 December 2019 в 08:51
поделиться
val b = c
val a = b

Вы не можете написать

val a = b = c

так как это определяет выражение

-1
ответ дан 5 December 2019 в 08:51
поделиться

«Тип возврата» выражения (присваивание) b = c - Unit , я боюсь, это означает, что этот синтаксис недействителен.

1
ответ дан 5 December 2019 в 08:51
поделиться
b = c; a = b

Неудобно, я знаю. Это Scala практически говорит вам "не делай этого". Считайте, что это Scala-версия Python'овской идентификации пространства для разграничения блоков.

1
ответ дан 5 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: