ColdFusion-Fehler mit IsDefined(): parameter muss eine syntaktisch gültige Variablen Namen
In ColdFusion, wenn ich rufe IsDefined("root.L1[1].L2")
ich erhalte die folgende Fehlermeldung:
Parameter 1 der Funktion IsDefined, das ist jetzt root.L1[1].L2, muss eine syntaktisch gültige Variablen-Namen.
Dies ist ein Gültiger Variablen-name, so was gibt?
Hier ist meine vereinfachte test-code:
<cfscript>
root = StructNew();
root.L1 = ArrayNew(1);
root.L1[1] = StructNew();
root.L1[1].L2 = "foo";
WriteOutput("root.L1[1].L2 is: #root.L1[1].L2#<br/>"); //no exception
if(IsDefined("root.L1[1].L2")) //exception!
WriteOutput("It is defined!");
else
WriteOutput("It is not defined!");
</cfscript>
- Es ist schon eine Weile her, seit ich getan habe CF, aber das sieht nicht wie ein "variable-name" für mich. Es sieht aus wie eine variable, name (root) plus eine Eigenschaft zuzugreifen, wird ein indexer-lookup, und dann eine andere Eigenschaft zugreifen. In anderen Worten, es ist nicht ein einfacher Variablenname, es ist tatsächlich mindestens drei Methodenaufrufe unter der Decke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
statt isDefined()
Ich vage erinnern, dass es Probleme mit komplexen Variablen mit isdefined(), aber ich kann mich nicht daran erinnern, dass die version.
IsDefined("a.b.c.d")
auch wennb
nichtc
element, aber ich denke, das wird nicht funktionieren, wenn es ein array in der Struktur.<cfif StructKeyExists(cfcatch.tagContext[i],'raw_trace')>
ich bekommen element an position 2 nicht gefunden werden kann. Gut duh, warum nicht zurück zu senden falsch? Dann habe ich versucht<cfif StructKeyExists(cfcatch.tagContext, i)>
und das sagtYou have attempted to dereference a scalar variable of type class coldfusion.runtime.ExceptionInformation as a structure with members
. WTFCF?Als erwähnt wurde, in einer follow-up-Kommentar sollten Sie stack die Logik prüft, a la:
Der parser überspringt die zweite logische argument, wenn die erste fehlschlägt, so dass Sie nicht bekommen, ein Fehler auf dem zweiten, wenn der erste übergibt.