2017-09-08 60 views
3

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

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

我现在看到它:Array.ofSize不需要回调,即使它做了,我不应该执行回调,因为我将它作为参数传递给Array.ofSize – loldrup

+0

我想关闭此问题,但显然我不够强大 – loldrup

+3

顺便说一句,不需要在'return Integer(myInteger);'中初始化一个新的整数,因为整数是不可变的。只需'返回myInteger'即可。 –

回答

5

你例如,我假设是做作,可以写为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比使用访问外部范围内变量的流更好。

4

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

做你想做可能是这个东西的一种方式:

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

Try it.

在迭代枚举(这是这里的{ getInteger() })的表达式懒洋洋地评估每次迭代器的next方法被调用(在这里发生4次,由于重复4次迭代)。

请注意,如果您使用序列枚举[ ... ],而不是那些惰性,它将不起作用。