GraphBox 내부에서 if/반복문이 작동하지 않습니다.JMP 사용자 여러분께, 제가 현재 작성 중인 스크립트에서 발생한 문제를 간략하게 설명드리겠습니다.
그래프 박스 생성 과정을 함수 (여기서는 ' 시험 ') 안에 인코딩하여 나중에 이 과정을 쉽게 반복할 수 있도록 하려고 합니다.
하지만 이 코드 조각은 ' 만약에 ' 문 안의 변수( 쇼호라인 , 참조 라인 수 )가 제대로 평가되지 않거나 아예 평가되지 않기 때문에 작동하지 않습니다. 함수의 인수로 사용하는 다른 변수( 너비 , 키 )는 의도대로 작동하는 것을 보면, 그래프 상자 안의 ' 만약에 ' 문에 문제가 있는 것 같습니다.
Clear Globals();
Names Default To Here( 1 );
Test = Function({width, height, showHorLines, numReferenceLines}, {Default Local},
gb = GraphBox(
FrameSize(width, height),
XScale(0, width),
YScale(0, height),
XName("split"),
YName("color"),
//[] Generate grey horizontal lines
If(showHorLines == 1,
PenColor(65);
For(h = 0, h <= numReferenceLines, h++,
HLine(h*height/numReferenceLines)
);
PenColor(0),
);
);
win = NewWindow("new window", gb);
);
Test(200, 200, 1, 10);
그래프 상자를 다른 객체로 바꾸지 않고 이 문제를 해결할 방법이 있을까요?
가능하다면 이 기능이 함수로 유지되면 좋겠습니다. 예전에 Eval, EvalExpr, Expr을 사용해서 비슷한 시도를 해봤지만 역시 작동하지 않고 비슷한 결과를 얻었거든요.
진심으로 감사드립니다.
자동화 및 스크립팅기초 데이터 분석 및 모델링데이터 탐색 및 시각화Re: GraphBox 내에서 if/Loop가 작동하지 않습니다Eval(Eval Expr())을 사용해 보시는 것을 추천합니다. 저는 이 방법으로 해결했습니다.
Names Default To Here( 1 );
Test = Function( {width, height, showHorLines, numReferenceLines},
{Default Local},
Eval(
Eval Expr(
gb = Graph Box(
FrameSize( Expr( width ), Expr( height ) ),
X Scale( 0, Expr( width ) ),
Y Scale( 0, Expr( height ) ),
XName( "split" ),
YName( "color" ),
If( Expr( showHorLines ) == 1,
Pen Color( 65 );
For( h = 0, h <= Expr( numReferenceLines ), h++,
H Line( h * Expr( height ) / Expr( numReferenceLines ) )
);
Pen Color( 0 );
,
)
);
win = New Window( "new window", gb );
)
)
);
Test( 200, 200, 1, 10 );
Re: GraphBox 내에서 if/Loop가 작동하지 않습니다@nozellot 간단히 설명드리자면, 그래프박스는 함수 Test가 종료된 후에도 오랫동안 남아 있습니다. 하지만 Test 함수의 매개변수는 Test 함수가 종료되면 사라집니다. 따라서 그래프박스에 연결된 스크립트는 나중에 해당 매개변수를 찾을 수 없게 됩니다.
@mmarchandFSLR님 은 매개변수를 값으로 변환하기 위해 제가 선호하는 방법을 사용하고 있습니다. 즉, 매개변수를 식별하는 방식으로 변환하는 것입니다.
Expr( showHorLines )
그리고 그것을 감싸서
Eval Expr( ... )
이는 모든 expr()을 평가하고 평가된 결과를 남겨둔 다음, 이를 사용합니다.
Eval( ... )
GraphBox() 함수를 변수 대신 상수를 포함하는 표현식으로 실행하면 더 이상 사용할 수 없는 매개변수에 의존하지 않는 그래프 상자가 생성됩니다.