Machen Sie verschachtelte benutzerdefinierte Funktionen in Formeln nutzbarHallo alle,
Ich versuche, ein Add-on zu erstellen, um einige komplexe Berechnungen auf der Grundlage von Temperatur und Druck durchzuführen.
Mein Ansatz besteht darin, ein Skript zu erstellen und dieses dann an ein unsichtbares Add-In anzuhängen. Verwenden Sie dann die Formeln im Pluging, in Formeln über global:myfunc().
Wenn ich eine einzelne Funktion in meinem Skript habe, funktioniert dieser Ansatz ( siehe Thema ).
Wenn ich jedoch zwei verschachtelte Funktionen in einem JSL-Skript habe. Dieser Ansatz funktioniert nicht mehr.
Hier ist mein JSL-Skript:
myfun1 = Function({x},
a = x+10;
Return(a);
);
myfun2 = Function({x},
b = myfun1(x)+10;
Return(b);
);Was ich also in der Praxis gerne tun würde, ist, myfun2 vom Formeleditor aus wie folgt aufzurufen:

aber ich erhalte die folgende Fehlermeldung:

Gibt es eine Möglichkeit, dies zu tun?
Betreff: Verschachtelte benutzerdefinierte Funktionen in Formeln nutzbar machenDanke für den Tipp, es funktioniert jetzt wie ein Zauber! 

Ich dachte, dass:
<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>
sollte in diesem Fall ausreichen. Ich verstehe jetzt, warum ich einen Namespace klar angeben muss.
Betreff: Verschachtelte benutzerdefinierte Funktionen in Formeln nutzbar machenWenn Sie JMP 14 nicht verwenden, würde ich vorschlagen, alle Ihre Funktionen in einem separaten Namensraum zu erstellen.Dadurch werden die Funktionen für alle Datentabellen und Skripte verfügbar.Sie können Ihr Add-in auch so strukturieren, dass das Skript jmpstartup.jsl tatsächlich geändert wird, um den Namespace zu erstellen und ihn mit allen Funktionen zu füllen, sodass die Funktionen automatisch verfügbar sind, wenn jemand JMP startet.
names default to here(1);
GlobalFunction=new namespace("GlobalFunction");
GlobalFunction:ShowValue = Function({x},show(x));
zippy=10;
GlobalFunction:ShowValue(zippy)Betreff: Verschachtelte benutzerdefinierte Funktionen in Formeln nutzbar machenHallo, danke für die Antwort.
Nun, das Problem ist etwas komplizierter als das Beispielskript im Anhang. Das Skript, das ich wirklich erstellen möchte, besteht aus über 30 Funktionen und einige davon rufen mehrere andere auf.
Die Idee ist, dass dieses Skript über ein JMP-Add-In anderen Menschen zugänglich gemacht wird. Wenn das Add-In installiert ist, können sie also jederzeit von jeder Tabelle aus auf die Funktionen zugreifen.
Ich möchte im Grunde das Äquivalent einer Python/C++-Klasse mit aufrufbaren Funktionen darin haben.
Was ich wissen möchte ist: Wie kann ich es mit der Spaltenformel zum Laufen bringen?
Wenn ich myfun2 innerhalb des Skripts aufrufe, erhalte ich keinen Fehler. Aber ich habe es, wenn ich es von dort aus starte Spaltenformel.
Ich weiß auch, dass in JMP14 offiziell die Einführung eigener Kostümformeln unterstützt wird ( Verknüpfung ).
Ich bin mir ziemlich sicher, dass dies möglich sein sollte. Es geht nur darum, wie man es in jsl/JMP richtig macht, und genau das ist meine Frage.
Betreff: Verschachtelte benutzerdefinierte Funktionen in Formeln nutzbar machenIch wäre bei der Verwendung benutzerdefinierter benutzerdefinierter Funktionen in einer Spaltenformel sehr vorsichtig, denn sobald Sie JMP schließen und die Tabelle dann erneut öffnen, werden diese Spaltenformeln nicht mehr funktionieren, da diese Funktionsnamen nicht definiert sind.Vielleicht ist das hier kein Problem, aber ich dachte nur, ich würde darauf hinweisen.
Es gibt einige Möglichkeiten, dies zu erreichen.Sie könnten beispielsweise mit Ausdrücken vorgehen.Oder Sie könnten die Definitionen von myfun1 und myfun2 direkt in die Spaltenformel einfügen:
Das ist nur das Einfügen in die Formel:
myfun1 = Function( {x},
a = x + 10;
Return( a );
);
myfun2 = Function( {x},
b = myfun1( x ) + 10;
Return( b );
);
myfun2( 1 );