Несоответствие типов при использовании оператора +

В настоящее время я пытаюсь научиться использовать Scala, но у меня возникли некоторые проблемы с синтаксисом.

Когда я набираю приглашение scala:

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

Я получаю следующую ошибку:

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

Я просто хотел использовать перегруженный оператор + очереди, определенный, как показано ниже:

def +[B >: A](elem : B) : Queue[B] Создает новую очередь с элементом, добавленным в конец старой очереди. Параметры elem - элемент для вставки

Но кажется, что scala выполняет конкатенацию строк. Итак, можете ли вы помочь мне понять, как добавить элемент в очередь (без использования enqueue, который отлично работает; я хотел бы использовать оператор +)? И, может быть, вы могли бы мне объяснить это поведение, которое кажется немного странным для новичка?

Спасибо


person Alexis Clarembeau    schedule 21.06.2016    source источник
comment
Откуда вы взяли это определение? Это противоречит текущим документам   -  person evan.oman    schedule 21.06.2016
comment
Этот метод из какой-то старой версии Scala. Его убрали в 2.9. Используйте более свежую документацию.   -  person Kolmar    schedule 21.06.2016
comment
Большое спасибо. Google давал scala-lang.org/api /2.5.0/scala/collection/immutable/Queue.html в качестве второго результата для неизменной очереди scala. Я не был так внимателен и не заметил, что это для версии 2.5. Я переоценил возможности поисковой системы Google :)   -  person Alexis Clarembeau    schedule 21.06.2016


Ответы (1)


Вы используете неправильный оператор (см. документы):

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)

Поскольку оператор + не имеет другого значения для этих типов, Scala по умолчанию использует конкатенацию строк, что приводит к ошибке несоответствия типов.

person evan.oman    schedule 21.06.2016