2010-06-15 2 views
1

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

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, и они продолжали работать нормально. Еще страннее.

ответ

4

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

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

+0

Переключить на: 'до' казалось, устранить проблему! Благодаря! – Ceilingfish

Смежные вопросы