我在尝试编译的类中有一个旧的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行)没有从
LongRange
(1..12
)到Region
的隐式类型转换。Region
对象必须显式构造并传递给x10.regionarray.Array
构造函数 - (第7行)默认的积分类型现在是
Long
,而不是Int
。Int
文字必须以字符"n
"作为后缀,如"(Point)=>0n
"中所示 - (第8-9行)数组类的索引类型已从
Int
更改为Long
(以支持非常大的数据结构)。因此,分解后的Point
迭代器for ([i] in testArray)
现在产生i:Long
而不是i:Int
,这意味着当分配给第9行的Int
数组元素时,现在需要转换i as Int