在 GraphBox 中,if/Loop 語句不起作用。尊敬的 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,結果也失敗了,遭遇了類似的命運。
此致
自動化和腳本編寫基礎資料分析與建模數據探索與視覺化回覆:在 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 );
回覆:在 GraphBox 中 if/loop 語句不起作用@nozellot簡單解釋一下:即使函數 Test 退出後,Graphbox 仍然會存在很長時間。 Test 的參數會在函數退出時消失。附加到 Graphicbox 的腳本之後將無法找到這些參數。
@mmarchandFSLR正在使用我推薦的解決方案將參數轉換為它們的值。透過識別它們
Expr( showHorLines )
並用……包裹起來
Eval Expr( ... )
它會計算所有 expr() 的值,並將計算結果保留下來,然後使用
Eval( ... )
要使用包含常數而不是變數的表達式來運行 GraphBox() 函數,您將獲得一個不依賴不再可用的參數的圖形框。