2017-09-08 1 views
3

가변 정수를 증가시키는 데 어려움이 있습니다. 의도 된 출력 동안정수 증가시키기

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

:이 코드 :

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 
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 같은 값으로 채워진 배열을 생성하고 있습니다.

이 될 수 원하는 일을하는 방법 :

반복 가능한 열거 식 (이 여기 { getInteger() }입니다) 게으르게 평가 될 때마다 반복자의 다음

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

(Try it.를) 메소드가 호출됩니다 (iterable을 4 번 반복함으로써 4 번 발생합니다).

시퀀스 열거 형 [ ... ]을 대신 사용하는 경우 작동하지 않는다는 점에 유의하십시오. 이는 게으름이 아닙니다.