我在增加一个变量整数时遇到了一些麻烦。这段代码:
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 }
该怎么做?
答案 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>
请注意,如果使用序列枚举[ ... ]
,它将无法正常工作,而不是非延迟。