递增整数
Incrementing integers
我在递增可变整数时遇到了一些问题。此代码:
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 }
这是怎么回事?
您已经发现这里发生了什么...构造函数 Array.ofSize(n, val)
正在创建一个数组,其中填充了相同值的 n
倍。
一种做你想做的事情的方法可能是这样的:
Array<Integer> integers =
Array({ getInteger() }.repeat(4));
(Try it.)
可迭代枚举中的表达式(这里是 { getInteger() }
)每次调用迭代器的 next 方法时都会延迟求值(由于重复迭代 4 次,这里发生了 4 次)。
请注意,如果您改用序列枚举 [ ... ]
,它将无法工作,它们是非惰性的。
你的例子,我认为是人为的,可以写成 Array(0:4)
或 Array(0..3)
。但是假设你有充分的理由想要遍历一个生成函数,我会这样写:
Array(loop(0)((i) => i+1).take(4))
或者,等价地:
Array(loop(0)(Integer.successor).take(4))
甚至:
Array(loop(0)(1.plus).take(4))
IMO,这比使用在外部作用域中访问变量的流要好得多。
我在递增可变整数时遇到了一些问题。此代码:
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 }
这是怎么回事?
您已经发现这里发生了什么...构造函数 Array.ofSize(n, val)
正在创建一个数组,其中填充了相同值的 n
倍。
一种做你想做的事情的方法可能是这样的:
Array<Integer> integers =
Array({ getInteger() }.repeat(4));
(Try it.)
可迭代枚举中的表达式(这里是 { getInteger() }
)每次调用迭代器的 next 方法时都会延迟求值(由于重复迭代 4 次,这里发生了 4 次)。
请注意,如果您改用序列枚举 [ ... ]
,它将无法工作,它们是非惰性的。
你的例子,我认为是人为的,可以写成 Array(0:4)
或 Array(0..3)
。但是假设你有充分的理由想要遍历一个生成函数,我会这样写:
Array(loop(0)((i) => i+1).take(4))
或者,等价地:
Array(loop(0)(Integer.successor).take(4))
甚至:
Array(loop(0)(1.plus).take(4))
IMO,这比使用在外部作用域中访问变量的流要好得多。