Alexis Clarembeau
Alexis Clarembeau

Reputation: 2964

Type mismatch when using + operator

I'm currently trying to learn how to use Scala but I'm stuck with some syntax problems.

When I type in the scala prompt:

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

I get the following error:

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

I just wanted to use the overloaded + operator of the queue defined as below:

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

But it seems that scala does a string concatenation. So, can you help me to understand how to add an element to the queue (without using enqueue which works perfectly; I would like to use the + operator)? And maybe, could you give me some explaination about that behaviour that seems a bit strange for a beginner?

Thank you

Upvotes: 0

Views: 307

Answers (1)

evan.oman
evan.oman

Reputation: 5572

You are using the wrong operator (see 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)

Since the + operator has no other meaning given those types, Scala defaults to String concatenation, giving you the type mismatch error.

Upvotes: 6

Related Questions