2016-06-21 16 views
0

Ich versuche gerade zu lernen, wie man Scala benutzt, aber ich bin mit einigen Syntaxproblemen fest.Typ stimmt nicht überein wenn + Operator

Wenn ich schreibe in der scala prompt:

import scala.collection.immutable._ 
var q = Queue[Int](1) 
println((q+1).toString) 

Ich erhalte die folgende Fehlermeldung:

<console>:12: error: type mismatch; 
found : Int(1) 
required: String 
       println((q+1).toString) 

Ich wollte nur die überladenen + verwenden, Betreiber der Warteschlange wie folgt definiert:

def +[B >: A](elem : B) : Queue[B] Creates a new queue with element added at the end of the old queue. Parameters elem - the element to insert

Aber es scheint, dass scala eine String-Verkettung tut. Kannst du mir helfen zu verstehen, wie man ein Element zur Warteschlange hinzufügt (ohne Enqueue zu verwenden, das perfekt funktioniert; ich möchte den Operator + verwenden)? Und vielleicht, könnten Sie mir etwas über dieses Verhalten erzählen, das für einen Anfänger etwas seltsam erscheint?

Danke

+1

Woher haben Sie diese Definition? Es steht im Widerspruch zur aktuellen Dokumentation –

+2

Diese Methode stammt von einer alten Version von Scala. Es wurde in 2.9 entfernt. Verwenden Sie neuere Dokumentation. – Kolmar

+0

Vielen Dank. Google gab http://www.scala-lang.org/api/2.5.0/scala/collection/immutable/Queue.html als zweites Ergebnis für "scala queue immutable" an. Ich war nicht so vorsichtig und ich habe nicht bemerkt, dass es für Version 2.5 war. Ich habe die Macht der Google-Suchmaschine überschätzt :) –

Antwort

5

Sie den falschen Operator (siehe docs):

scala> var q = Queue[Int](1) 
q: scala.collection.immutable.Queue[Int] = Queue(1) 

scala> q :+ 2 
res1: scala.collection.immutable.Queue[Int] = Queue(1, 2) 

scala> 0 +: q 
res2: scala.collection.immutable.Queue[Int] = Queue(0, 1) 

Da der + Betreiber keine andere Bedeutung hat diese Typen gegeben, Scala standardmäßig auf String-Verkettung, können Sie die Art geben Nichtübereinstimmungsfehler.

Verwandte Themen