Throw() innerhalb von include/function<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe einen Code, der von vielen Skripten verwendet wird, also habe ich ihn in eine Include-Datei übertragen.Dieser Code führt eine Prüfung durch und löst aus, wenn sie fehlschlägt.Allerdings stelle ich fest, dass dadurch nur das Skript beendet wird, das im Include ausgeführt wird. Anschließend wird der Code aufgerufen, der das Include ursprünglich aufgerufen hat, und mit der Ausführung begonnen.Diese Art von Verhalten nenne ich Soft Kill.Ich brauche die darin enthaltene throw() Funktion, um „beide“ Skripte zu beenden.
Soft Kills sind in anderen Sprachen typisch, werden jedoch innerhalb von Funktionen ausgeführt. Auf diese Weise kann es passieren, dass ein Teil des Codes stillschweigend fehlschlägt.Es scheint jedoch, dass throw() innerhalb einer Funktion tatsächlich alle laufenden Skripte hart beendet.
Beispiel:
throwTest.jsl
Drucken ( "A" ) ;
Enthalten ( „~path\throwTest.include.jsl“ ) ;
Drucken ( "D" ) ;
throwTest = Funktion ({} , { Standardmäßig lokal } ,
Drucken ( „E“ ) ;
Wurf () ;
Drucken ( "F" ) ;
) ;
throwTest () ;
Drucken ( "G" ) ;
throwTest.include.jsl
Drucken ( "B" ) ;
Wurf () ;
Drucken ( "C" ) ;
Protokollausgabe:
„A“ „B“ „D“ „E“
Weiß jemand, wie man JSL aus einem enthaltenen Skript heraus hart beendet?
Betreff: Throw() innerhalb von include/functionSuper, danke Craige@JMP !Dann freue ich mich auf JMP 13.
Betreff: Throw() innerhalb von include/functionJMP 13 (geplant für September) befasst sich damit; Für den Fix müssen Sie try(...) um das Include herum hinzufügen.(try fängt einen Wurf aus einem Include in 12.2 nicht ab).Ohne den Versuch verhält sich JMP 13 genauso wie 12.2.
JMP 13:
Print("A");
versuchen( Include("$desktop\throwTest.include.jsl"), print("catch")) ;
Print("D");
throwTest = Function({}, {Default Local},
Print("E");
Wurf();
Print("F");
);
throwTest();
Print("G");
„A“ „B“ „fangen“ „D“ „E“
Betreff: Throw() innerhalb von include/functionIch sehe die Dinge anders.
Wenn Sie nur „viele Dinge“ und „viele verschiedene Arten von Funktionen“ ausführen möchten, hindert Sie nichts daran, viele Funktionen in einem Skript zusammenzufassen.Sie können sogar Fehlerprüfungen durchführen und die Ausführung von Funktionen stoppen, ohne das gesamte Skript auszulösen. --siehe mein Return()-Skript unten.
Der Zweck von Includes besteht darin, die Zeit zu reduzieren, die Sie zum Codieren genau desselben Skripts benötigen.
Wenn ich 100 verschiedene Skripte habe, die alle a=1; b=2; c=3; ... also weiter zu zz=702, Sie möchten das nicht alles 100 Mal eingeben.Ohne Includes würden Sie es höchstwahrscheinlich einmal eingeben und kopieren und in Ihre anderen Skripte einfügen.Aber was ist, wenn Sie später einen Fehler finden?Sie müssten 100 Skripte bearbeiten und den Code manuell korrigieren.Eine mühsame Arbeit.Was aber, wenn Sie am Ende einen schnelleren Weg finden, die gleiche Aufgabe, nämlich die Definition all dieser Variablen, auszuführen?Sie müssten Ihren Code in allen Skripten 100 Mal umgestalten.Was ist, wenn Sie entscheiden, dass Sie tatsächlich a=2; b=3... usw.Sie müssten Ihren Code 100 Mal ändern.Das Ändern von 100 Skripten ist eine fehleranfällige Aufgabe. Was passiert, wenn Sie ein Skript übersehen, eine falsche Änderung vornehmen usw.?
Der Zweck von Includes besteht nicht darin, eine Slave/Master-Beziehung herzustellen, in der Sie den Slave töten und den Master retten können.Dafür haben wir Funktionen.Der Zweck von Includes besteht darin, beim Codieren Zeit zu sparen.
(Hinweis: Ein weiterer Zweck von Includes besteht darin, die Skriptsprachen getrennt zu halten, um das Debuggen zu vereinfachen und den Code sauber zu halten.Includes sind besonders hilfreich in Webanwendungen mit HTML/CSS/JavaScript, aber das gilt nicht wirklich für JSL.)
Das Übergeben einer Prüfvariablen bringt einige Probleme mit sich, nicht viele, aber einige.Was passiert, wenn ein anderes Skript dieselbe Prüfvariable verwendet?Was passiert, wenn ich mich entscheide, die Prüfvariable zu ändern?Was passiert, wenn ich mich bei der Prüfvariable vertippt habe? In jedem Fall müsste ich dann jedes Skript suchen, in das ich „throwTest.include“ eingefügt habe, und die Prüfvariable bearbeiten, damit sie korrekt ist, was den Zweck der Verwendung von „include“ von vornherein zunichte macht.
Betreff: Throw() innerhalb von include/functionUpdate, ich bin mir nicht sicher, warum ich gestern Abend nicht daran gedacht habe, aber das frühzeitige Senden der return()-Anweisung löst effektiv eine Funktion aus.Dies ist auch in anderen Sprachen üblich.
throwTest = Funktion ({} , { Standardmäßig lokal } ,
Drucken ( „E“ ) ;
Zurückkehren () ;
Drucken ( "F" ) ;
) ;
throwTest () ;
Drucken ( "G" ) ;
Ausgang:
"Z.B"
Betreff: Throw() innerhalb von include/functionIch muss Ihrer Aussage widersprechen, dass die obige Methode „den Zweck der Verwendung eines Include zunichte macht“.
Der enthaltene Code kann viele, viele verschiedene Arten von Funktionen ausführen und viele Dinge wie Datenbereinigung, Transformationen usw. ausführen. Wenn innerhalb des enthaltenen Codes ein ungültiger Anwendungsfall entdeckt wird, kann es sinnvoll sein, die gesamte Anwendung herunterzufahren.Daher müsste man den enthaltenen Code auslösen und dann, wenn die Ausführung an den Hauptcode zurückgegeben wird, erkennen, dass die Fehlersituation erkannt wurde, und dann das Hauptskript auslösen.
Betreff: Throw() innerhalb von include/functionDies ist zwar ein einfacher Workaround, verfehlt jedoch den Zweck der Verwendung eines Includes.
Betreff: Throw() innerhalb von include/functionIch glaube, dass Sie dieses Problem durch eine einfache Weitergabe von Informationen über eine Prüfvariable lösen und im Hauptskript Maßnahmen ergreifen können.
Namen standardmäßig hier ( 1 ) ;
Enthalten ( „C:\Benutzer\txjim\Dokumente\JMP\throwTest.include.jsl“ ) ;
Wenn ( werfen Sie es == 1 , Wurf () ) ;
Drucken ( "D" ) ;
throwTest = Funktion ( {} ,
{Standardlokal} ,
Drucken ( „E“ ) ;
Wurf () ;
Drucken ( "F" ) ;
) ;
throwTest() ;
Drucken ( "G" ) ;
// Hier ist die Include-Datei
Drucken ( "B" ) ;
werfen Sie es = 1 ;
Wurf () ;
Drucken ( "C" ) ;