我試圖讓用戶輸入幾個變量,一旦這些變量被認為可以,那麼“確定”按鈕就會從灰色變為活動狀態。 我得到了這個工作。 我沒有工作的是 Eval Expr (輸出)。 這只是一件簡單的事情,只是為了確保在進行計算之前我可以正常工作。 當我運行腳本時,這是一個屏幕截圖,“確定”按鈕呈灰色:

然後我輸入合理的值,並且在單擊驗證輸入後“確定”按鈕顯示為活動狀態:

但它沒有運行我的表達式並創建表。 我究竟做錯了什麼? 我使用的是 JMP 16.0 Pro。 就像我說的,我做了一些非常簡單的事情,比如創建一個表,只是為了確保我的腳本正常工作,然後再深入研究我真正需要的東西。
Names Default To Here( 0 );
Clear Log();
w = New Window( "Variables",
<<MODAL>= 1 | alpha == 0,
alphaw = New Window( "Error!",
<<MODAL>= 1 | beta == 0,
betaw = New Window( "Error!",
<<MODAL> 90 | percent == 0,
percentw = New Window( "Error!",
<<MODAL> 0.90 | p0 == 0,
p0w = New Window( "Error!",
<<MODAL>= 1 | Abs( beta ) >= 1 | DOEN == 0 |
Abs( percent ) > 90 | percent == 0 | Abs( p0 ) > 0.90 | p0 ==
0 | alpha == 0 | beta == 0, bb << Enable( 0 ),
bb << Enable( 1 ),
Eval Expr( output )
);
)
),
bb = Button Box( "OK" ),
bb << Enable( 0 );
)
)
);
Show( alpha );
Show( beta );
Show( DOEN );
Show( percent );
Show( p0 );
output = Expr(
dt = New Table( "Test Table",
New Column( "a", Set Values( {alpha, beta, N, percent, p0} ) )
);
w << closeWindow;
);</MODAL></MODAL></MODAL></MODAL></MODAL>
我首先嘗試了 Eval (output) 但它不起作用,所以我第二次嘗試了 Eval expr() 。 我嘗試了自己的輸出,但沒有成功。
在創建 w 之前移動輸出表達式,並在按下 OK 按鈕時創建輸出。
查看更多... 而且因為您使用的是模態,您也可以在模態關閉後創建新表,因為腳本在模態關閉之前不會繼續執行。
下面是一個示例,如果您願意,您可以如何重構代碼(您還可以使用 << 設置最小值和 << 設置最大值將最小/最大值“強制”到數字編輯框)。 如果您願意,您還可以在驗證步驟中顯示所有錯誤消息:
查看更多...Names Default To Here(0);
Clear Log();
validator = function({alpha, beta, N, percent, p0}, {Default Local}, //could also be expression, but this way you avoid creating unnecessary variables
DOEN = 0;
For(i = 1, i < 10, i++,
If(2 ^ i == N,
DOEN = DOEN + 1
)
);
error_list = {};
If(Abs(alpha) >= 1 | alpha == 0,
Insert Into(error_list,"Alpha needs to be between 0 and 1, please fix and try again");
);
If(Abs(beta) >= 1 | beta == 0,
Insert Into(error_list,"Beta needs to be between 0 and 1, please fix and try again");
);
If(DOEN == 0,
Insert Into(error_list,"N should be 2\!U1D3A, do not include centerpoints or repeats with N, please fix and try again");
);
If(Abs(percent) > 90 | percent == 0,
Insert Into(error_list,"The percent needs to be between 0 and 90%, please fix and try again");
);
If(Abs(p0) > 0.90 | p0 == 0,
Insert Into(error_list,"The p0 needs to be between 0 and 0.90, please fix and try again");
);
If(N Items(error_list) > 0,
nw = New Window( "Error!", <<MODAL></MODAL>名稱默認為此處(0);清除日誌(); validator = function({alpha, beta, N,percent, p0}, {Default Local}, //也可以是表達式,但這樣可以避免創建不必要的變量DOEN = 0; For(i = 1, i < 10, i++, If(2 ^ i == N, DOEN = DOEN + 1 ) ); error_list = {}; If(Abs(alpha) >= 1 | alpha == 0, Insert Into(error_list,"Alpha 需要在之間0 和1,請修復並重試"); ); If(Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta 需要介於0 和1 之間,請修復並重試" ); ); If(DOEN == 0, Insert Into(error_list,"N 應該是 2\!U1D3A,不包括中心點或用 N 重複,請修復並重試"); ); If(Abs(percent) > 90 | 百分比== 0, 插入(error_list,"百分比需要在0 到90% 之間,請修復並重試"); ); If(Abs(p0) > 0.90 | p0 == 0, 插入Into(error_list ,"p0 需要在0 到0.90 之間,請修復並重試"); ); If(N Items(error_list) > 0, nw = New Window( "Error!", <
編輯:
展示盒使用的一些選項:
查看更多...Names Default To Here(0);
Clear Log();
validator = function({alpha, beta, N, percent, p0}, {Default Local},
error_list = {};
DOEN = 0;
For(i = 1, i < 10, i++,
If(2 ^ i == N,
DOEN = DOEN + 1
)
);
If(Abs(alpha) >= 1 | alpha == 0,
Insert Into(error_list,"Alpha needs to be between 0 and 1, please fix and try again");
);
If(Abs(beta) >= 1 | beta == 0,
Insert Into(error_list,"Beta needs to be between 0 and 1, please fix and try again");
);
If(DOEN == 0,
Insert Into(error_list,"N should be 2\!U1D3A, do not include centerpoints or repeats with N, please fix and try again");
);
If(Abs(percent) > 90 | percent == 0,
Insert Into(error_list,"The percent needs to be between 0 and 90%, please fix and try again");
);
If(Abs(p0) > 0.90 | p0 == 0,
Insert Into(error_list,"The p0 needs to be between 0 and 0.90, please fix and try again");
);
If(N Items(error_list) > 0,
nw = New Window( "Error!", <<MODAL></MODAL>名稱默認為此處(0);清除日誌();驗證器=函數({alpha,beta,N,百分比,p0},{默認本地},error_list = {}; DOEN = 0; For(i = 1,i < 10,i ++,If(2 ^ i == N) , DOEN = DOEN + 1 ) ); If(Abs(alpha) >= 1 | alpha == 0, Insert Into(error_list,"Alpha 需要在0 和1 之間,請修復並重試"); ); If (Abs(beta) >= 1 | beta == 0, Insert Into(error_list,"Beta 需要介於0 和1 之間,請修復並重試"); ); If(DOEN == 0, Insert Into(error_list) ,"N 應為2\!U1D3A,不包括中心點或與N 重複,請修復並重試"); ); If(Abs(percent) > 90 |percent == 0, Insert Into(error_list ,"The百分比需要在0 到90% 之間,請修復並重試"); ); If(Abs(p0) > 0.90 | p0 == 0, Insert Into(error_list,"p0 需要在0 到0.90 之間,請修復並重試"); ); If(N Items(error_list) > 0, nw = New Window( "Error!", <
我認為你應該能夠擺脫 eval expr() 。 如果你只是做輸出,它會評估。 您也可以只執行 Eval(output)。EvalExpr 更多的是用於創建動態表達式。這是腳本索引中的部分。
EvalExpr 返回表達式的副本,其中 x 中的每個 Expr() 子句都替換為其計算值
所以
Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ); // returns Length("X12")
如果你想評估它,你必須這樣做
Eval(Eval Expr( Length( Expr( "X" || Char( 12 ) ) ) ));
但你只是想評估一個表達式,我認為所以你可能不需要 evaexpr()