递增整数

时间:2017-09-08 09:30:14

标签: ceylon

我在增加一个变量整数时遇到了一些麻烦。这段代码:

variable Integer myInteger = -1;
Integer getInteger () {
    myInteger = myInteger + 1;
    print("myInteger: " + myInteger.string);
    return Integer(myInteger);
}

Array<Integer> integers =
        Array.ofSize(
            4,
            getInteger());

print(integers);

给出这个输出:

myInteger: 0
{ 0, 0, 0, 0 }

虽然预期输出是:

myInteger: 0
myInteger: 1
myInteger: 2
myInteger: 3
{ 0, 1, 2, 3 }

该怎么做?

2 个答案:

答案 0 :(得分:5)

我认为你的例子是人为的,可以写成<script> var isShow = false; function change() { if(!isShow) { isShow = true; document.getElementById('d1').style.display=''; } else {document.getElementById('d1').style.display='none'; } function change2 () { if(!isShow) { isShow = true; document.getElementById('d2').style.display=''; } else { isShow = false; document.getElementById('d2').style.display='none'; } } function change3 () { if(!isShow) { isShow = true; document.getElementById('d3').style.display=''; } else { isShow = false; document.getElementById('d3').style.display='none'; } } </script> Array(0:4)。但是假设你有一些很好的理由想要循环生成函数,我就是这样写的:

Array(0..3)

或等同地:

Array(loop(0)((i) => i+1).take(4))

甚至:

Array(loop(0)(Integer.successor).take(4))

IMO比使用访问外部范围中的变量的流要好得多。

答案 1 :(得分:4)

您已经找到了这里发生的事情......构造函数Array.ofSize(n, val)正在创建一个填充n次相同值的数组。

做你想做的事可能是这样的:

Array<Integer> integers =
        Array({ getInteger() }.repeat(4));

Try it.

每次调用迭代器的下一个方法时,可迭代地计算可迭代枚举中的表达式(这里是{ getInteger() })(这里发生了4次,因为重复了4次迭代)。 p>

请注意,如果使用序列枚举[ ... ],它将无法正常工作,而不是非延迟。