2017-09-08 85 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次迭代)。

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