将旧的X10示例移植到2.5版



我在尝试编译的类中有一个旧的X10示例。

import x10.array.Array;
import x10.io.Console;
...
public static def main(args: Array[String](1)) {
    val regionTest = 1..12;
    val testArray = new Array[Int](1..12, (Point)=>0);
    for ([i] in testArray) {
        testArray(i) = i;   
        Console.OUT.println("testArray("+i+") = " + testArray(i));
    }
}

不幸的是,它似乎已经过时了。我可以自己想,你现在必须写public static def main(args:Rail[String])val regionTest = 1..12的定义似乎还可以。数组的语法肯定是错误的,后面的所有行也可能是错误的。我试图用这个指南来解决这个问题,但没有成功。

我的设置正在运行,一个新的X10 Eclipse IDE项目中的初始类正在运行。

有人能帮我把它移植到2.5.x版本吗?

在X10 2.4版本中有许多不向后兼容的更改,需要更改代码-请参阅"移植到X10 2.4"指南。

您的示例将更新如下:

import x10.regionarray.Array;
import x10.regionarray.Region;
import x10.io.Console;
....
public static def main(args:Rail[String]) {
    val regionTest = Region.makeRectangular(1..12);
    val testArray = new Array[Int](regionTest, (Point)=>0n);
    for ([i] in testArray) {
        testArray(i) = i as Int;
        Console.OUT.println("testArray("+i+") = " + testArray(i));
    }
}

这表明了许多重要的变化:

  • (第1-2行)通用数组类已从x10.array包移动到x10.regionarray。默认情况下,不再导入这些类
  • (第6-7行)没有从LongRange1..12)到Region的隐式类型转换。Region对象必须显式构造并传递给x10.regionarray.Array构造函数
  • (第7行)默认的积分类型现在是Long,而不是IntInt文字必须以字符"n"作为后缀,如"(Point)=>0n"中所示
  • (第8-9行)数组类的索引类型已从Int更改为Long(以支持非常大的数据结构)。因此,分解后的Point迭代器for ([i] in testArray)现在产生i:Long而不是i:Int,这意味着当分配给第9行的Int数组元素时,现在需要转换i as Int

相关内容

  • 没有找到相关文章

最新更新