JSL 버튼 박스 : 버튼 생성시 변수 수정내 스크립트는 for 루프를 사용하여 버튼 목록을 만듭니다. 각 버튼은 버튼 이름을 입력해야하는 "RepGen"함수를 호출합니다. 버튼의 동작은 버튼을 누를 때까지 평가되지 않는 것 같습니다. 이때 for 루프는 버튼 이름이 포함 된 변수를 덮어 씁니다. 버튼을 누를 때가 아니라 버튼을 만들 때이 변수를 평가하는 방법이 있습니까? 아니면 더 좋은 방법이 있습니까?
dtSum = dt << Summary( Group( :ColX ) );
For( i = 1, i <= N Rows( dtSum ), i++,
varName = dtSum:ColX[i];
obparts << append( Button Box( varName, RepGen( varName ) ) );
);
재 : JSL 버튼 박스 : 버튼 생성시 변수 수정Eval (EvalExpr ()) 또는 Eval (Substitute ())을 사용하면 런타임 변수를 정적으로 만들 수 있습니다. 사용 방법에 대한 예제는 스크립팅 색인을 확인하십시오.
Names Default to Here( 1 );
RepGen = function({btn_name},
{DEFAULT LOCAL},
print(btn_name);
);
vlb = Vlistbox();
btns = {"Btn 1", "Other", "Button 2 (or3)"};
for(i=1, i<=nitems(btns), i++,
vlb << Append(
Eval(
//run just this block to show that the buttons are getting evaluated at creation time
EvalExpr(
Buttonbox(btns[i], RepGen(Expr(btns[i])))//the expr will evaluate inside the evalexpr
)
)
)
);
new window("Test",
vlb
);