使嵌套自定義函數可在公式中使用大家好,
我正在嘗試構建一個 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 );