下面的程式碼不起作用,當您嘗試將emptyVar傳遞給函數時,b/c JSL會評估emptyVar,而不是在函數中的執行時評估它。
isEmptyTest = Function({var},
return(isempty(var));
);
isEmptyTest(emptyVar);
如果這能改變的話那就太棒了。
是的,我試圖將它用於案例 1。 我正在建立一個利用用戶設定檔的工具。 由於變數是從使用者定義的檔案中載入的,因此它們可能存在也可能不存在,並且可能會也可能不會設定為 true/false。 我希望只建立一個包裝函數來測試它,直到我意識到可以執行“或”語句,因為一旦它達到真值,它就會退出。
if(isempty(var) | !var,
//run code)
);
如果變數尚未聲明,則不會出現 b/c 錯誤,它將發出 Truthy 訊號並繼續執行 if 語句中的程式碼,而不檢查其他依賴項。 如果變數已被定義,那麼我可以檢查它是否為真。
符號表記錄了所有曾經出現過的變數放到一個值。 如果一個變數從未被設定過,則它是未初始化的,並且使用它可能是一個錯誤。
內建的是空的()函數從幾種不尋常的情況中得出特殊的情況。
情況1 : 以前從未使用過的變數
Is Empty(neverSeenBefore) = 1;
print(neverSeenBefore)
/*:
Name Unresolved: neverSeenBefore in access or evaluation of 'neverSeenBefore' , neverSeenBefore/*###*/
名稱未解析表示 JMP 檢視符號表但找不到該名稱。
案例2 (正常情況):變數設定為內建函數傳回的值空的()函數,或另一個傳回empty()的函數
ev=empty(); show(isempty(ev),ev);
/*:
Is Empty(ev) = 1;
ev = Empty();
如果您希望測試空,您應該使用空的()函數來初始化變數。
案例3 :由內建函數清除的變數清除全域變數()功能
ev2=42; clear globals(ev2); show(isempty(ev2),ev2);
Is Empty(ev2) = 1;
ev2 = ev2;
使用清除全域變數()在生產程式碼中不是一個好主意,但在開發程式碼時可能會有所幫助。 它不會從符號表中刪除符號,但會刪除其值,甚至不會為該值保留empty()。 它的行為可能類似於empty()或缺失,這取決於它的使用方式。
JSL 按值將參數傳遞給使用者編寫的函數,製作副本以供函數使用。 JMP 的未來版本可能允許透過引用傳遞參數。 我們將看看此時透過引用傳遞未初始化的變數會發生什麼。