代码之家  ›  专栏  ›  技术社区  ›  Ceilingfish

scala循环的nomethod错误

  •  1
  • Ceilingfish  · 技术社区  · 15 年前

    我在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 回复  |  直到 15 年前
        1
  •  4
  •   Rex Kerr    15 年前

    scala通常不是两个版本之间的二进制兼容。特别是,这意味着如果您为2.6.1编译,然后尝试为2.7.7运行,即使语法根本没有更改,库中几乎肯定有,因此可能会出错。我怀疑您运行的版本与编译时使用的版本不同。

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

    推荐文章