Ошибка NoMethod из цикла scala - PullRequest
1 голос
/ 15 июня 2010

У меня есть пара циклов над вложенным объектом массива в scala

def populateBoard(data:Array[Array[Char]]) {

    Board.resize(data(0).length, data.length)

    for(y <- 0 to data.length-1) {
        val row = data(y)
        for(x <- 0 to row.length-1) {
            Board.putObjectAt(x,y,GamePieceFactory.createInstance(row(x),x,y))
        }
    }

}

Что отлично работает в модульных тестах, но когда я запускаю приложение, я получаю следующее исключение:

java.lang.NoSuchMethodError: scala.runtime.RichInt.to(I)Lscala/Range;
at net.ceilingfish.pacman.App$.populateBoard(App.scala:37)

Строка 37 - это строка for(y <- 0 to data.length-1). Очень странно. Модульные тесты запускают scala 2.6.1, а командная строка - 2.7.7. Есть ли какие-то обратные несовместимые изменения между этими двумя версиями?

ОБНОВЛЕНИЕ Я переключил модульные тесты на версию 2.7.7, и они продолжали работать просто отлично. Четный коэффициент.

1 Ответ

4 голосов
/ 16 июня 2010

Scala обычно не двоично совместим между версиями.В частности, это означает, что если вы компилируете для 2.6.1, а затем пытаетесь запустить для 2.7.7, даже если синтаксис не изменился вообще, библиотеки почти наверняка имеют, и, следовательно, вы можете столкнуться с ошибками.Я подозреваю, что вы работаете не с той версией, с которой вы компилируете.

Кроме того, вы можете использовать 0 until n вместо 0 to n - 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...