Задать вопрос
@sectronix

Почему при присваивании кортежа возникает эксепшен?

Выполняю код в интерпретаторе:
scala> val coords = Vector((0,0))
coords: scala.collection.immutable.Vector[(Int, Int)] = Vector((0,0))


Далее пишу

scala> val (x, y) = coords(0)

Получаю длиннейший стек, вот что на вершине:

java.lang.AssertionError: assertion failed: List(value _1$mcI$sp, value _1$mcI$sp, value _1$mcI$sp)
	at scala.reflect.internal.Symbols$Symbol.suchThat(Symbols.scala:1916)


При этом есть способ обойти это поведение через присваивание в промежуточную переменную:
scala> val z = coords(0)
z: (Int, Int) = (0,0)

scala> val (x, y) = z
x: Int = 0
y: Int = 0


Есть у меня подозрение, что Scala не может автоматически вывести тип в этом выражении.
val (x, y) = coords(0)

Правильно ли я понимаю или причина в чём-то другом?
  • Вопрос задан
  • 2332 просмотра
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
mrRontgen
@mrRontgen
Scala lover.
Причина в другом. Откатитесь до версии 2.11.4 или скачайте актуальный транк. Там метод apply в скопе два раза находился. В актуальном танке это уже пофиксили :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы