Xtend:在for循环中向元素添加元素

时间:2016-02-08 12:04:11

标签: arrays xtend

我正在尝试在Xtend中进行最简单的操作,但不知道如何操作。我想在for循环中向double数组添加double[]值。

例如:

def do(EList<MyObject> list) {
    var double[] array = newDoubleArrayOfSize(list.size);
    for (i : 0 ..< list.size) {
        array[i] = list.get(i).myValue;
    }
    return array;
}

第四行显示错误,因为我无法使用array[i] = ...

如何在Xtend中实现它?在用户指南中没有找到任何内容。

1 个答案:

答案 0 :(得分:2)

Xtend有一个不同的(&#34;类似列表&#34;)语法来访问数组元素,有关详细信息,请参阅related documentation

  

通过扩展来检索和设置数组的值   方法get(int)和set(int,T),它们是专门重载的   数组并直接转换为等效的本机Java代码   myArray的[INT]。

所以你的代码应该是:

def method(EList<MyObject> list) {
    var double[] array = newDoubleArrayOfSize(list.size);
    for (i : 0 ..< list.size) {
        array.set(i, list.get(i).myValue);
    }
    return array;
}

您可以通过省略分号和array变量的类型声明来进一步简化您的方法:

def method(EList<MyObject> list) {
    val array = newDoubleArrayOfSize(list.size)
    for (i : 0 ..< list.size) {
        array.set(i, list.get(i).myValue)
    }
    return array
}

另一种方法是使用更多功能样式编写方法。如果您可以将EList替换为List(或EList extends / implements List),那么您只需写一下:

def double[] method(List<MyObject> list) {
    list.map[myValue]
}

在这种情况下,您必须将返回类型显式声明为double[],否则会将其推断为List<Double>

(还有一件事:通常集合比数组更受欢迎,因为它们更灵活,API更丰富,而Xtend还有一些额外的好处,如collection literals。)