Ein Expr()-Objekt als nicht ausgewertetes Expr()-Objekt zur späteren Verwendung in ein anderes Skript einfügen?Ergänzend zu @jthis Antwort unter „Inhalt des Parse-Ausdrucks statt Variablennamen in neues Skript einfügen“ : Wie fügt man ein Expr()-Objekt als nicht ausgewertetes Expr()-Objekt in ein anderes Skript ein, um es später zu verwenden?
Ich verwende JMP 18.1.2
Names Default To Here( 1 );
dt = New Table( "My Table" );
e1 = Expr(
Print( "Run some code." )
);
e2 = Expr(
e1;
Print( "Run some other code." );
);
e3 = Eval Expr(
Expr( Name Expr( e1 ) ); // Define, but do not evaluate e1 here.
Expr( Name Expr( e2 ) ); // Evaluate e1 here.
);
Show( e3 );
Eval( Eval Expr( dt << New Script( "Test", Expr( Name Expr( e3 ) ) ) ) );
Automatisierung und SkriptingWindowsBetreff: Ein Expr()-Objekt als nicht ausgewertetes Expr()-Objekt in ein anderes Skript einfügen, um es später zu verwenden?Ein netter Trick in JMP:
Sie können die Eingabetaste auf der numerischen Tastatur drücken, um eine Codezeile auszuführen.
Dies ist beim Debuggen sehr hilfreich.
ein weiterer Trick:
Klicken Sie mit der rechten Maustaste in das Skriptfenster und aktivieren Sie:

der letzte Trick:
Markieren Sie den Eval-Ausdruck(...) innerhalb eines Auswertung() und „führen Sie ihn aus“, um zu prüfen, ob der Ausdruck Ihren Erwartungen entspricht:

Dies zeigt, dass dort, wo Sie schreiben
// Evaluate e1 here.
Name Ausdruck übernimmt lediglich den Ausdruck, der in der Variable gespeichert ist. Es wertet ihn nicht aus. e1 bleibt e1 .
Bearbeiten:
Aber vielleicht ist es ja genau das, was Sie erreichen möchten? Keine Frage – nur ein Kommentar?
Das JSL-Skript schreibt „e1“ in das Tabellenskript.
Und JMP versucht, e1 auszuwerten, wenn der Benutzer das Tabellenskript ausführt.
Das bedeutet: Sie müssen e1 im Kontext der Datentabelle definieren, sonst erhalten Sie eine Fehlermeldung:

[e1 ist nur innerhalb des here-Namespace des Skripts definiert]
Betreff: Ein Expr()-Objekt als nicht ausgewertetes Expr()-Objekt in ein anderes Skript einfügen, um es später zu verwenden?Ich bin mir nicht ganz sicher, was Sie wollen, da e1 bereits in Zeile 5 definiert wurde. Was möchten Sie in e3 haben? So etwas wie das hier
e1 = Expr(Print("Code"));
e1; //e2
Print("Code2"); //e2
Oder
e1 = Expr(Print("Code"));
Print("Code");
Print("Code2"); //e2Betreff: Ein Expr()-Objekt als nicht ausgewertetes Expr()-Objekt in ein anderes Skript einfügen, um es später zu verwenden?Danke @hogi und @jthi für die Beiträge. Ich konnte das gewünschte Ergebnis mithilfe einer Funktion erzielen.
Names Default To Here( 1 );
dt = New Table( "My Table" );
e1 = Expr(
f1 = Function( {},
{Default Local},
Print( "Run some code." )
)
);
e2 = Expr(
f1();
Print( "Run some other code." );
);
e3 = Expr(
f1();
Print( "Run even more code." );
);
e4 = Eval Expr(
Expr( Name Expr( e1 ) ); // Define, but do not evaluate e1 here.
Expr( Name Expr( e2 ) ); // Evaluate e1 here.
Expr( Name Expr( e3 ) ); // Evaluate e1 here.
);
Eval( Eval Expr( dt << New Script( "Test", Expr( Name Expr( e4 ) ) ) ) );Betreff: Ein Expr()-Objekt als nicht ausgewertetes Expr()-Objekt in ein anderes Skript einfügen, um es später zu verwenden?Sie können es auch in zusätzliche Ausdrücke einschließen.
Names Default To Here(1);
dt = New Table("My Table");
e0 = Expr(e1 = Expr(Print("Run some code.")));
e2 = Expr(
e1;
Print("Run some other code.");
);
e3 = Eval Expr(
Expr(Name Expr(e0)); // Define, but do not evaluate e1 here.
Expr(Name Expr(e2)); // Evaluate e1 here.
);
Show(e3);
Eval(Eval Expr(dt << New Script("Test", Expr(Name Expr(e3)))));

Betreff: Ein Expr()-Objekt als nicht ausgewertetes Expr()-Objekt in ein anderes Skript einfügen, um es später zu verwenden?Sehr clever! Danke.