將 Expr() 物件作為未評估的 Expr() 物件插入到另一個腳本中以供稍後使用?在將解析表達式的內容而不是變數名稱插入新腳本中,添加到@jthi的答案,如何將 Expr() 物件作為未評估的 Expr() 物件插入到另一個腳本中以供稍後使用?
我正在使用 JMP 18.1.2
Names Default To Here( 1 );
dt = New Table( "My Table" );
e1 = Expr(
Print( "Run some code." )
);
e2 = Expr(
e1;
Print( "Run some other code." );
);
e3 = Eval Expr(
Expr( Name Expr( e1 ) ); // Define, but do not evaluate e1 here.
Expr( Name Expr( e2 ) ); // Evaluate e1 here.
);
Show( e3 );
Eval( Eval Expr( dt << New Script( "Test", Expr( Name Expr( e3 ) ) ) ) );
自動化和腳本視窗回覆:將 Expr() 物件作為未評估的 Expr() 物件插入到另一個腳本中以供稍後使用?JMP中的一個巧妙技巧:
您可以按下數字鍵盤上的Enter鍵來執行一行程式碼。
這對於調試非常有幫助。
另一個技巧:
右鍵單擊腳本視窗並啟動:

最後一招:
在 Eval( ) 內部標記 Eval Expr(... )並「執行」它來檢查表達式是否符合您的預期:

這顯示你在哪裡寫
// Evaluate e1 here.
名稱表達式只是採用儲存在變數中的表達式。它不對其進行評價。 e1保持e1 。
編輯:
但也許這就是您想要實現的?沒有問題 — — 只是評論?
JSL 腳本會將「e1」寫入表格腳本。
當使用者執行表格腳本時,JMP 將嘗試評估 e1。
這表示:您必須在資料表上下文中定義 e1,否則您將收到錯誤訊息:

[e1 只是在腳本的此處命名空間內定義]
回覆:將 Expr() 物件作為未評估的 Expr() 物件插入到另一個腳本中以供稍後使用?我不太確定你要做什麼,因為 e1 已經在第 5 行定義了。像這樣
e1 = Expr(Print("Code"));
e1; //e2
Print("Code2"); //e2
或者
e1 = Expr(Print("Code"));
Print("Code");
Print("Code2"); //e2回覆:將 Expr() 物件作為未評估的 Expr() 物件插入到另一個腳本中以供稍後使用?感謝@hogi和@jthi的意見。我能夠透過使用函數來實現我想要的結果。
Names Default To Here( 1 );
dt = New Table( "My Table" );
e1 = Expr(
f1 = Function( {},
{Default Local},
Print( "Run some code." )
)
);
e2 = Expr(
f1();
Print( "Run some other code." );
);
e3 = Expr(
f1();
Print( "Run even more code." );
);
e4 = Eval Expr(
Expr( Name Expr( e1 ) ); // Define, but do not evaluate e1 here.
Expr( Name Expr( e2 ) ); // Evaluate e1 here.
Expr( Name Expr( e3 ) ); // Evaluate e1 here.
);
Eval( Eval Expr( dt << New Script( "Test", Expr( Name Expr( e4 ) ) ) ) );回覆:將 Expr() 物件作為未評估的 Expr() 物件插入到另一個腳本中以供稍後使用?您也可以將其包裝到額外的 Expr 中
Names Default To Here(1);
dt = New Table("My Table");
e0 = Expr(e1 = Expr(Print("Run some code.")));
e2 = Expr(
e1;
Print("Run some other code.");
);
e3 = Eval Expr(
Expr(Name Expr(e0)); // Define, but do not evaluate e1 here.
Expr(Name Expr(e2)); // Evaluate e1 here.
);
Show(e3);
Eval(Eval Expr(dt << New Script("Test", Expr(Name Expr(e3)))));

回覆:將 Expr() 物件作為未評估的 Expr() 物件插入到另一個腳本中以供稍後使用?很聰明!謝謝。