在 JMP 版本中使用 JSL 15.2.0。 JSL 代碼嵌入在附表中,腳本名稱=“控製圖”。
當嘗試通過自定義圖形腳本為可變數量的相分組和“where”條件添加規格限制(LSL、目標、USL)時,我正在努力解決嵌套循環中的行為。我的嵌套循環當前導致最後一個圖表的規格限制應用於創建的所有控製圖,而不是每個圖表/階段/其中條件接收其各自的限制。
非常感謝您在正確的方向上的推動!
托德
Todd,與更典型的編程語言相比,JMP / JSL 有點奇怪 - 特別是,您幾乎必須自己進行所有範圍控制。
我這裡有一個例子來說明你正在處理的事情——人們可能會認為下面的腳本將創建一個“紅色的”然後“藍色的”圖形腳本中的三角形,但只創建了兩個藍色三角形。
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle??? ****/
color = "Red";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [75, 120, 120] );
);
/**** Make a blue triangle??? ****/
color = "Blue";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [85, 130, 130] );
);
發生這種情況是因為 JSL 處理作用域的方式——當您使用<<添加圖形腳本()函數,然後將其添加為一組未評估的語句(實際上它是一個未評估的語句)膠水()功能)。 任何存在於<<添加圖形腳本()腳本將被評估僅在執行期間腳本的。當圖形腳本運行時(記住,它附加到框架盒它嵌入在窗口的顯示樹中)需要解析每個變量。範圍解析規則規定它將調查當地的範圍(如果存在),這裡範圍(如果存在),那麼全球的範圍——如果在這些範圍中找不到它們,它將被替換為空的()價值。
所以腳本被添加到框架盒在主腳本內部,但僅在稍後執行。此時,顏色變量是“藍色的” ,因此兩個三角形都是藍色的。
解決這個問題的方法是解決所有感興趣的變量添加時圖形腳本,而不是執行時。為此,請使用評估(評估表達式())方法,如此處所示。
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle!!! ****/
color = "Red";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [75, 120, 120] );
);
) );
/**** Make a blue triangle!!! ****/
color = "Blue";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [85, 130, 130] );
);
) );
您需要對變量中的所有變量使用此方法<<添加圖形腳本()函數以便讓它們保持當時的值<<添加圖形腳本()被稱為。