2010-06-15 88 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

Scala在版本之间通常不是二进制兼容的。特别是,这意味着如果你编译2.6.1然后尝试运行2.7.7,即使语法没有改变,这些库几乎肯定会有,因此你可能会遇到错误。我怀疑你没有使用你正在编译的相同版本运行。

此外,您可能希望使用0 until n而不是0 to n - 1

+0

切换到'直到'似乎解决了问题!谢谢! – Ceilingfish 2010-06-15 20:42:00