If/Loop funktioniert nicht innerhalb von GraphBoxLiebe JMP-Benutzer, dies ist eine vereinfachte Darstellung eines Problems, auf das ich aktuell in einem meiner Skripte stoße:
Ich versuche, die Erstellung einer Diagrammfeld in einer Funktion (hier ' Prüfen ') zu kodieren, damit ich diesen Prozess später einfach wiederholen kann.
Dieser Codeabschnitt funktioniert jedoch nicht, da die Variablen innerhalb der „ Wenn “-Anweisung ( Horlinien anzeigen , AnzahlReferenzzeilen ) scheinbar nicht oder nicht korrekt ausgewertet werden. Dies ist der Fall, obwohl die anderen Variablen, die ich in den Funktionsargumenten verwende ( Breite , Höhe ), wie erwartet funktionieren. Daraus schließe ich, dass der Fehler in der „ Wenn “-Anweisung innerhalb der Graph Box liegt.
Clear Globals();
Names Default To Here( 1 );
Test = Function({width, height, showHorLines, numReferenceLines}, {Default Local},
gb = GraphBox(
FrameSize(width, height),
XScale(0, width),
YScale(0, height),
XName("split"),
YName("color"),
//[] Generate grey horizontal lines
If(showHorLines == 1,
PenColor(65);
For(h = 0, h <= numReferenceLines, h++,
HLine(h*height/numReferenceLines)
);
PenColor(0),
);
);
win = NewWindow("new window", gb);
);
Test(200, 200, 1, 10);
Gibt es eine Möglichkeit, dieses Problem zu lösen, ohne die Graph Box in ein anderes Objekt umzuwandeln?
Wenn möglich, wäre es auch schön, wenn dies eine Funktion bliebe, da ich einmal einen ähnlichen Ansatz mit Eval, EvalExpr und Expr ausprobiert habe, was ebenfalls nicht funktionierte und zu einem ähnlichen Schicksal führte.
Beste grüße
Automatisierung und SkripterstellungGrundlagen der Datenanalyse und ModellierungDatenexploration und -visualisierungBetreff: If/Schleife funktioniert nicht innerhalb von GraphBoxIch würde vorschlagen, Eval(Eval Expr()) zu verwenden. Das hat bei mir funktioniert.
Names Default To Here( 1 );
Test = Function( {width, height, showHorLines, numReferenceLines},
{Default Local},
Eval(
Eval Expr(
gb = Graph Box(
FrameSize( Expr( width ), Expr( height ) ),
X Scale( 0, Expr( width ) ),
Y Scale( 0, Expr( height ) ),
XName( "split" ),
YName( "color" ),
If( Expr( showHorLines ) == 1,
Pen Color( 65 );
For( h = 0, h <= Expr( numReferenceLines ), h++,
H Line( h * Expr( height ) / Expr( numReferenceLines ) )
);
Pen Color( 0 );
,
)
);
win = New Window( "new window", gb );
)
)
);
Test( 200, 200, 1, 10 );
Betreff: If/Schleife funktioniert nicht innerhalb von GraphBox@nozellot Kurze Erklärung: Die Graphbox existiert auch nach Beendigung der Funktion „Test“ weiterhin. Die Parameter von „Test“ gehen beim Beenden von „Test“ verloren. Das an die Graphbox angehängte Skript kann die Parameter später nicht mehr finden.
@mmarchandFSLR verwendet meine bevorzugte Lösung, um die Parameter in ihre Werte umzuwandeln. Indem er sie mit
Expr( showHorLines )
und das Ganze einwickeln mit
Eval Expr( ... )
welche alle expr()-Ausdrücke auswertet und die ausgewerteten Ergebnisse zurücklässt, dann verwendet
Eval( ... )
Wenn Sie die GraphBox()-Funktion mit dem Ausdruck ausführen, der Konstanten anstelle von Variablen enthält, erhalten Sie eine Graphbox, die nicht von Parametern abhängt, die nicht mehr verfügbar sind.