使嵌套自定义函数可在公式中使用大家好,
我正在尝试构建一个 add 来根据温度和压力进行一些复杂的计算。
我的方法是制作一个脚本,然后将其附加到一个不可见的加载项。 然后使用插入中的公式,通过 global:myfunc() 在公式中使用。
如果我的脚本中有一个函数,则此方法有效(看主题)。
但是,如果我在一个 jsl 脚本中有两个嵌套函数。 这种方法不再起作用了。
这是我的 jsl 脚本:
myfun1 = Function({x},
a = x+10;
Return(a);
);
myfun2 = Function({x},
b = myfun1(x)+10;
Return(b);
);因此,我在实践中想做的是从公式编辑器中调用 myfun2,如下所示:

但我收到以下错误:

有没有办法做到这一点?
回复:使嵌套自定义函数可在公式中使用感谢您的提示,它现在就像一个魅力! 
我以为:
<SPAN class="token function">names default to here</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
在这种情况下就足够了。 我现在明白为什么需要明确指定命名空间了。
回复:使嵌套自定义函数可在公式中使用如果您不使用 JMP 14,我的建议是在单独的名称空间中创建所有函数。这将使这些函数可用于所有数据表和脚本。您还可以构造您的插件来实际修改 jmpstartup.jsl 脚本来创建命名空间并使用所有函数填充它,从而使这些函数在有人启动 JMP 时自动可用。
names default to here(1);
GlobalFunction=new namespace("GlobalFunction");
GlobalFunction:ShowValue = Function({x},show(x));
zippy=10;
GlobalFunction:ShowValue(zippy)回复:使嵌套自定义函数可在公式中使用你好,谢谢你的回复。
这个问题比附件中的示例脚本要复杂一些。 我真正想要制作的脚本由 30 多个函数组成,其中一些函数调用了其他几个函数。
我们的想法是,其他人可以通过 JMP 插件使用该脚本。 因此,如果安装了插件,他们可以随时从任何表访问这些功能。
我基本上想要一个相当于 python/C++ 类的类,其中包含可以调用的函数。
我想知道的是:如何根据列公式使其发挥作用?
如果我在脚本中调用 myfun2,则不会出现错误。 但我从运行它时得到了它列公式。
我还知道在JMP14中官方支持引入自己的服装公式(关联)。
我很确定这应该是可能的,这只是如何在 jsl/JMP 中正确执行此操作的问题,这正是我的问题。
回复:使嵌套自定义函数可在公式中使用我在列公式中使用自定义用户定义函数时会非常小心,因为一旦关闭 JMP 然后再次打开该表,这些列公式就会中断,因为这些函数名称将是未定义的。也许这不是这里关心的问题,但我只是想指出这一点。
有很多方法可以解决这个问题。例如,您可以采取使用表达式的方法。或者您可以将 myfun1 和 myfun2 的定义直接放入列公式中:
这只是将其粘贴到公式中:
myfun1 = Function( {x},
a = x + 10;
Return( a );
);
myfun2 = Function( {x},
b = myfun1( x ) + 10;
Return( b );
);
myfun2( 1 );