이 "바인딩"코드가 Javafx에서 예상대로 작동하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/657486

  •  19-08-2019
  •  | 
  •  

문제

저는 Javafx를 처음 사용합니다. 아래 코드가 작동하지 않는 이유를 이해할 수 없습니다.

import javafx.util.Sequences;

def nums = [1..10];
var curr = 0;

var evenOrOdd = bind if (nums[curr] mod 2 == 0) "{nums[curr]} is an even number" else "{nums[curr]} is an odd number";

for (curr in [0..(sizeof nums -1)])
{
    println("{evenOrOdd}");
}

나는 얻고있다

1 is an odd number
1 is an odd number
1 is an odd number
1 is an odd number
1 is an odd number
1 is an odd number
1 is an odd number
1 is an odd number
1 is an odd number
1 is an odd number

코드를 변경하면

import javafx.util.Sequences;

def nums = [1..10];
var curr = 0;

var evenOrOdd = bind if (nums[curr] mod 2 == 0) "{nums[curr]} is an even number" else "{nums[curr]} is an odd number";

for (i in [0..(sizeof nums -1)])
{
    curr = i;
    println("{evenOrOdd}");
}

올바른 출력을 얻습니다.

1 is an odd number
2 is an even number
3 is an odd number
4 is an even number
5 is an odd number
6 is an even number
7 is an odd number
8 is an even number
9 is an odd number
10 is an even number

분명히, 루프의 카운터 증분은 값 변화로 취급되지 않으며 결합 된 표현은 다시 평가되지 않습니다.

누구 든지이 행동의 개념을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

그만큼 ~을 위한 표현식은 반복 변수를 암시 적으로 정의합니다 (따라서 선언 할 필요가없는 이유 두 번째 예에서). 이미 같은 이름을 가진 변수가 있더라도 ~을 위한 여전히 그 범위에 대한 새로운 것을 만들 것입니다. 당신의 묶다 표현은 당신의 외부의 변수 ~을 위한 루프, 당신의 안에있는 것이 아닙니다 ~을 위한 고리. 루프 외부의 사람은 변경되지 않으므로 바운드 표현식은 변하지 않습니다.

이 행동을 보여주는 예 ~을 위한:

var curr = 0;
var ousideCurrRef = bind curr;
println("Before 'for' loop: curr={curr}");
for (curr in [0..3])
{
    println("In 'for' loop: curr={curr} ousideCurrRef={ousideCurrRef}");
}
println("After 'for' loop: curr={curr}");

이것은 인쇄 할 것입니다 :

Before 'for' loop: curr=0
In 'for' loop: curr=0 ousideCurrRef=0
In 'for' loop: curr=1 ousideCurrRef=0
In 'for' loop: curr=2 ousideCurrRef=0
In 'for' loop: curr=3 ousideCurrRef=0
After 'for' loop: curr=0

그래서 외부 ~을 위한 내부에서 동일한 이름의 변수를 수정하면 루프가 변경되지 않습니다. ~을 위한 고리.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top