Versuch, Include Files List() zu verwendenHallo alle,
Ich versuche, Include File List() zu verwenden, und ich erhalte Fehler. Es funktioniert nicht so, wie ich es erwartet hätte.
Hier ist ein Beispiel.
Ich habe 3 Dateien namens Include1.jsl, Include2.jsl, Include3.jsl, die ich versuche, in TestInclude.jsl einzufügen, das unten aufgeführt ist:
Clear Log();
//Names Default To Here( 1 );
Clear Symbols();
Clear Globals();
Include( "Include1.jsl" );
Include( "Include2.jsl" );
Include( "Include3.jsl" );
show(Include File List());
Alle vier Dateien befinden sich im selben Ordner.Jede der drei enthaltenen Dateien hat ihre entsprechende
show("IncludeScriptN");wobei N 1, 2 und 3 ist
Wenn ich TestInclude,jsl ausführe, erwarte ich Folgendes:
"IncludeScript1";
"IncludeScript2";
"IncludeScript3";
Include File List() = {"C:\...\TestingLocaleScipts\TestInclude.jsl", "C:\...\TestingLocaleScipts\Include1.jsl", "C:\...\TestingLocaleScipts\Include2.jsl", "C:\...\TestingLocaleScipts\Include3.jsl"};
Stattdessen sehe ich das:
"IncludeScript1";
"IncludeScript2";
"IncludeScript3";
Include File List() = {"C:\...\TestingLocaleScipts\TestInclude.jsl"}Enthaltene Dateien SIND also tatsächlich enthalten, sie funktionieren tatsächlich, aber die Funktion zeigt sie nicht an? Was mache ich falsch?
Vielen Dank,
M.
Betreff: Versuch, Include Files List() zu verwenden@vince_faller Ziemlich sicher, dass der Aufruf von IncludeFileList aus einer benutzerdefinierten Funktion den aktuellen Stack von Include-Dateien zurückgeben muss und nicht den Stack, der vorhanden war, als die Funktion definiert wurde. Wie Ihr Beispiel zeigt, können Sie den Stack zum Zeitpunkt der Funktionsdefinition erfassen, indem Sie IncludeFileList innerhalb der eingebundenen Datei, aber außerhalb einer Funktionsdefinition ausführen.
Ich denke, einer der besten Anwendungsfälle besteht darin, den Namen der aktuellen Datei aus Listenelement 1 abzurufen.
Betreff: Versuch, Include Files List() zu verwendenVerstanden. Danke vielmals. Erklärungen im Skriptindex oder in der Hilfe reichen definitiv nicht aus, um zu verstehen, in welche Richtung die Verschachtelung geht: Entweder sind es alle Skripte, die in einem Skript enthalten sind, das als Form bezeichnet wurde, oder alle Skripte, die von dort kommen, wo es das Stammverzeichnis aufgerufen hat.Betreff: Versuch, Include Files List() zu verwenden@Craige_Hales
Im Ruhestand und noch berufstätig?
Können Sie erklären, was Sie mit der benutzerdefinierten Fehlerberichterstattung meinen?Wollen Sie nur sagen, für welches Skript der Fehler aufgetreten ist?
Weil ich dachte, die Hauptfunktion wäre, Ihnen zu zeigen, in welchem Skript Sie sich zum Zeitpunkt des Anrufs befinden.
Wenn alle Ihre untergeordneten Skripte nur Funktionen sind, die nicht ausgeführt werden, sehen Sie dann nicht wirklich, dass die Include-Datei list() verschachtelt ist, oder?
Names default to here(1);
fn1 = Save Text File( "$temp/a.jsl", "show(Include File List()); f2 = function({}, include file list());" );
fn2 = Save Text File( "$temp/b.jsl", "include(fn1); f = function({}, include file list());" );
Include( fn2 );
show(f(), f2());Betreff: Versuch, Include Files List() zu verwendenDie Funktion gibt die aktuelle Verschachtelung der enthaltenen Dateien zurück. Auf der Stammebene, wo Sie es genannt haben, gibt es nur eine Datei, keine eigentliche Verschachtelung. Versuchen Sie, es von einer der enthaltenen Dateien aus aufzurufen.
fn1 = Save Text File( "$temp/a.jsl", "show(<SPAN>Include File List</SPAN>())" );
fn2 = Save Text File( "$temp/b.jsl", "include(fn1)" );
Include( fn2 );
Dateiliste einschließen() = {"C:\Benutzer\v1\AppData\Local\Temp\a.jsl", "C:\Benutzer\v1\AppData\Local\Temp\b.jsl", "Script.jsl" };
script.jsl ist der Name des nicht gespeicherten Skripts auf Stammebene.
Die Funktion dient zum Implementieren benutzerdefinierter Fehlerberichte; wenn etwas schief geht in a Versuchen() in die fn1 datei kannst du die fangen -Klausel, um die verschachtelten Includes zu melden. Als cooler Nebeneffekt erhalten Sie auch den Namen der aktuellen Skriptdatei.
Es gibt zwei Möglichkeiten, Include-Dateien zu verwenden: Sie können sie sich als Funktionsbibliotheken oder als auszuführende Codeblöcke vorstellen. Die Dateiliste einschließen ist nicht sehr nützlich, wenn es sich um Funktionsbibliotheken handelt, da der größte Teil des Codes nicht ausgeführt wird, während das Include ausgeführt wird ... es definiert die Funktionen und Rückgaben. Aber wenn die Include-Datei ein Codeblock ist, der ausgeführt wird, wenn er eingebunden wird, und möglicherweise mehr Codeblöcke enthält, dann Dateiliste einschließen könnte beim Debuggen hilfreich sein.