1

我正在尝试编译的类中有一个旧的 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 版吗?

4

1 回答 1

1

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 行)没有从LongRange( 1..12) 到的隐式类型转换Region。必须Region显式构造对象并将其传递给x10.regionarray.Array构造函数。
  • (第 7 行)默认的整数类型现在LongInt. Int文字必须以字符 ' ' 为后缀,如n在 ' (Point)=>0n' 中一样。
  • (第 8--9 行)数组类的索引类型已从 更改IntLong(以支持非常大的数据结构)。因此,分解的Point迭代器for ([i] in testArray)现在产生i:Long而不是i:Int- 这意味着i as Int现在在第 9 行分配给Int数组元素时需要强制转换。
于 2015-04-14T03:06:13.953 回答