<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe eine Funktion aufgerufen table_exists .Sie übergeben ihm einen Tabellennamen als String und es gibt true zurück, wenn die Tabelle vorhanden ist, andernfalls false.Ich habe kürzlich beschlossen, es zu aktualisieren, indem ich überprüfte, ob das Eingabeargument überhaupt an irgendetwas gebunden war, aber es gefällt mir nicht.
Zum Beispiel:
ist leer ( xyz )
Gibt eine 1 im Protokoll zurück, was bedeutet, dass xyz an nichts gebunden ist.Aber wenn ich es versuche
table_exists ( xyz )
Ich erhalte diese Fehlermeldung:
FEHLER: Name ungelöst: xyz beim Zugriff oder bei der Auswertung von „xyz“, xyz
Hier ist die Funktion:
table_exists = Funktion ( { Tabellenname } ,
{ Standardmäßig lokal } ,
tbl_exists_flag = 0 ;
Wenn ( ! ist leer ( Tabellenname ) ,
// Alle Tabellen durchlaufen und prüfen, ob diese vorhanden ist
num_tables = ntisch () ;
Für ( ich = 1 , ich <= num_tables , ich ++,
one_name = Datentabelle ( ich ) << Holen Sie sich den Namen ;
Wenn ( one_name == Tabellenname ,
tbl_exists_flag = 1 ;
brechen () ; // Springe aus der Schleife, nachdem wir die Tabelle gefunden haben
) ;
) ;
) ;
tbl_exists_flag ;
) ;
Die Variable xyz muss ausgewertet werden, damit ihr Wert an die Funktion übergeben werden kann.
Ich kann mir zwei Möglichkeiten vorstellen, damit umzugehen. Wenn Sie eine bestimmte Variable verwenden, können Sie sie zu Beginn des Skripts Empty() zuweisen. xyz = Empty(). Wenn es später einen Namen erhält, wird dieser durchgereicht; Wenn es nie einen Namen erhält, ist es leer.
Die andere Möglichkeit wäre, den Funktionsaufruf in einen Versuch einzuschließen und den Fall einer undefinierten Variablen zu behandeln, bevor Sie sie an die Funktion übergeben. try(table_exists(xyz), "kein Tabellenname")
Die Funktion „table_exists“ dient allgemeinen Zwecken, daher wollte ich die Situation, wenn sie mit einer leeren Variablen aufgerufen wird, ordnungsgemäß bewältigen.
Ich denke, die Fehlermeldung liegt daran, dass Sie xyz (eine undefinierte JSL-Variable) an die Funktion übergeben. Ich denke, JSL versucht, xyz zu analysieren (bevor der Code Ihrer Funktion ausgeführt wird), und es schlägt fehl, weil es leer ist. Versuchen Sie, xyz in Ihrem Funktionsaufruf in Anführungszeichen zu setzen:
table_exists("xyz")