2012-04-09 6 views
13

Während durch das Buch gehen Scala for the Impatient, stieß ich auf diese Frage:x = y = 1 in Scala?

mit einer Situation kommen, wo die Zuordnung x = y = 1 in Scala gültig ist. (Tipp: Wählen Sie einen geeigneten Typ für x.)

Ich bin mir nicht sicher, was genau der Autor mit dieser Frage meint. Die Zuweisung gibt keinen Wert zurück, daher sollte etwas wie Unit() als Wert von x zurückgeben. Kann jemand darauf hinweisen, was ich hier vermissen könnte?

Dank

+0

ich nehme stark an, dass der Autor war * nicht * Denken von x als Typ Unit -, dass durch „gültig“, sie „und einen Zweck haben“ implizieren,. –

Antwort

12

In der Tat ist xUnit in diesem Fall:

var y = 2 
var x = (y = 1) 

und schließlich:

var x: Unit =() 
+0

Also ist der ganze Punkt dieser Frage zu zeigen, dass var x = y = 1 gültig ist? –

+10

@sc_ray: * value * nicht immer bedeutet * sensible * ... –

5
var y = 2 
var x = y = 1 

kann wie folgt gelesen werdenSie können auf den Punkt der Lage zu sein, also ohne Fehler x=y=1 in der REPL Shell eingeben:

var x:Unit = {} 
var y = 0 
x = y = 1 
+2

Das ist, was ich im Sinn hatte, außer dass ich geschrieben hätte 'var x =()' – cayhorstmann

3

Hier ist eine weniger bekannte Fall, in dem die Setter-Methode ihr Argument zurückgibt. Beachten Sie, dass die Art der x hier eigentlich Int ist:

object AssignY { 
    private var _y: Int = _ 
    def y = _y 
    def y_=(i: Int) = { _y = i; i } 
} 

import AssignY._ 

var x = y = 1 

(Diese Funktion in der XScalaWT Bibliothek verwendet wird, und wurde in that question diskutiert.)

+1

Klar, das ist nicht, was ich im Sinn hatte: -) Aber wenn du seltsame Lösungen willst, wie wäre es mit 'implizit def unit2int (u: Unit) = 42; var x = 1; var y = 2; x = y = 1 ' – cayhorstmann

1

BTW, wenn auf beide den gleichen Wert zuweisen Verwendung erforderliche Variablen noch dann:

 
scala> var [email protected] = 1 
x: Int = 1 
y: Int = 1