Wie würde ich eine verkettete Aufgabe in Scala ausdrücken?

8

Wie würde ich den folgenden Java-Code in scala ausdrücken?

%Vor%

Übrigens weise ich Variablen neu zu (nicht deklarieren).

    
someguy 14.03.2010, 13:38
quelle

5 Antworten

13

Die kürzeste Abkürzungssyntax in Scala kann nur verwendet werden, wenn Sie eine var oder val deklarieren.

%Vor%

Aus der Scala-Referenz, Abschnitt 4.1

  

Eine Wertdeklaration val x 1 , ...,   x n : T ist eine Abkürzung für die Sequenz   von Wertdeklarationen val x 1 : T;   ...; val x n : T. Eine Wertdefinition   val p 1, ..., p n = e ist a   Kurzschrift für die Reihenfolge des Wertes   Definitionen val p <1> ; ...; val p n   = e. Eine Wertdefinition val p 1, ..., p n: T = e ist eine Kurzform für die   Folge von Wertdefinitionen val p1   : T = e; ...; valp : T = e.

Dies funktioniert nicht für die Neuzuweisung an var . Der C / Java-Stil funktioniert aus den hier erläuterten Gründen nicht: Was ist die Motivation für Scala Assignment Evaluating to Unit

    
retronym 14.03.2010, 13:58
quelle
5

Unter Verwendung der Tatsache, dass die linke Seite einer Zuweisung syntaktisch ein Muster ist. (Siehe PatVarDef & gt; PatDef & gt; Pattern2 in SLS .)

a = b = 5

%Vor%

x = y = z = neues Objekt

%Vor%

Beachten Sie, dass der Ausdruck auf der rechten Seite nur einmal ausgewertet wird.

Leider funktioniert diese Syntax nicht für die re Zuweisung (also für x = y = value müssen Sie x = value; y = x noch tun).

Siehe auch [scala-language] Angekettete Aufgabe in Scala

    
Eugen Labun 13.02.2012 04:05
quelle
1

Der "Rückgabetyp" des Ausdrucks (Zuweisung) b = c ist Unit , fürchte ich, was bedeutet, dass diese Syntax nicht gültig ist.

    
oxbow_lakes 14.03.2010 13:51
quelle
1
%Vor%

Peinlich, ich weiß. Das ist Scala, der dir ziemlich sagt, "tu das nicht". Betrachten Sie es als Scala-Version von Pythons Raumidentität zur Blockbegrenzung.

    
Daniel C. Sobral 14.03.2010 19:41
quelle
-1
%Vor%

Sie können nicht schreiben

%Vor%

da definiert das einen Ausdruck

    
Brian Agnew 14.03.2010 13:44
quelle