進行更改後運行腳本。 不關閉並重新打開腳本就無法工作 - 為什麼?我正在學習 JSL 並獲得了一種我認為我開始時沒有的行為。 我想知道這種行為是預期的還是由於我無意中進行的設置更改而發生的。
我有一個簡單的“主”腳本,它調用一個函數和另一個腳本。 當我重新打開 JMP 並重新運行主腳本或它調用的其他函數/腳本時,它們都運行良好並產生預期的結果。 但是,當我對它們中的任何一個進行更改時,它們不起作用(例如,如果我註釋包含在主腳本中的腳本,例如下面的最後一行)。 如果我關閉所有打開的腳本,然後重新啟動它們,它們會再次工作。 來自其他編程語言,我不希望這種行為。 任何方向都非常感謝
下面是我的主腳本示例(我在 JMP13 上)。
//clear log ();<BR />getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");評論上面的最後一行(或者如果我取消註釋清除日誌())即
//clear log ();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
//include ("generateJournal.jsl");在上面的腳本中給了我以下錯誤
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
任何方向都非常感謝。
腳本編寫回复:進行更改後運行腳本。 不關閉並重新打開腳本就無法工作 - 為什麼?在您的示例中,我沒有看到您定義函數的位置
getDataTable4partID
JSL 是一種解釋型語言,需要在調用代碼之前創建代碼中引用的任何項目。它不是一種編譯語言,它首先通過所有代碼和識別函數等。現在可能令人困惑的是,一旦函數被定義,它將保留在內存中並可用,直到它被清除
clear symbols();<BR />// or<BR />clear globals();
如果您牢記這一點來執行您的代碼,您可能會明白為什麼您的 JSL 找不到該函數。
回复:進行更改後運行腳本。 不關閉並重新打開腳本就無法工作 - 為什麼?謝謝@txnelson .
這是函數
getDataTable4partID
你是不是建議我用
clear symbols();
// clear globals();
在我的主腳本的頂部?
如果是,那麼我已經厭倦了它而沒有任何行為改變。
另外,我忘記在上面提到當主腳本沒有運行(在對其進行更改之後)並且我需要重新啟動 JMP 以使腳本再次按預期運行時,我還需要運行我的主腳本正在調用的函數,一次,沒有它我的主腳本不會運行。 這顯然是一種不受歡迎的行為,我擔心我沒有正確地做事。
回复:進行更改後運行腳本。 不關閉並重新打開腳本就無法工作 - 為什麼?你應該開始你的整個腳本:
Names Default to Here( 1 );
Clear Symbols();
這將穩定命名空間環境並清除所有先前的值,從而在每次從頂部運行代碼時重新開始。
回复:進行更改後運行腳本。 不關閉並重新打開腳本就無法工作 - 為什麼?謝謝@txnelson . 好的,這就是我所做的,現在即使在關閉並重新運行或重新啟動 JMP 之後,我的腳本和函數也無法工作。
我的主要腳本
Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");我的功能是(沒有數據庫詳細信息)
Names Default to Here (1)
getDataTable4PartID = Function({PartID}, {dtTemp},
dtTemp = Open Database("connectionstring",
"select '" || PartID || "' as value
from dual",
PartID
);
return(dtTemp);
);和我的腳本
plotallcharts.jsl;
也有它的拳頭線
Names Default to Here (1)
我仍然收到錯誤
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
但有時運行主腳本時日誌沒有顯示任何內容。
回复:進行更改後運行腳本。 不關閉並重新打開腳本就無法工作 - 為什麼?Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");
我假設這是您代碼的第一部分。 正確的?
代碼中的第三行正在尋找一個名為“getDataTable4partID”的函數。當代碼嘗試運行該行時,尚未定義該函數。您需要先執行函數定義,然後才能調用它。