下面的代码不起作用,当您尝试将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 的未来版本可能允许通过引用传递参数。 我们将看看此时通过引用传递未初始化的变量会发生什么。