Werden ColdFusion-Objekte (d. H. CFCs, die über cfobject aufgerufen werden) normalerweise als Referenz oder als Wert übergeben (im Speicher kopiert)? Und ist es möglich, ColdFusion zu zwingen, ein Objekt auf irgendeine Weise zu übergeben?Werden ColdFusion-Objekte als Referenz oder Wert übergeben?
Antwort
ColdFusion-Objekte werden als Referenz übergeben. Es gibt nicht wirklich eine Möglichkeit, ein Objekt nach Wert zu übergeben, aber Sie können eine Kopie mit der Funktion duplicate() erstellen.
Nun, bedenken Sie, dass mit duplicate() doesn't work in MX 7 zum Kopieren bestimmter Dinge, wie CFCs und COM, CORBA und Java-Objekte. Sie can copy a CFC in CF 8, obwohl.
Komplexe Objekte wie Strukturen und CFCs werden als Referenz übergeben, aber wenn Sie ein Array an eine UDF übergeben, wird es als Wert übergeben. Dies macht es unmöglich, eine benutzerdefinierte Funktion zu schreiben, die ein Array wie die eingebauten Array-Funktionen mutiert. Wenn Sie ein Array wirklich als Referenz übergeben müssen, können Sie es in eine Struktur umbrechen, und dann wird es als Referenz übergeben.
FWIW, Arrays werden auch als Verweis in der CFML-Engine Railo übergeben, wie viele Entwickler glauben, dass sie sollten. Railo 3.1 soll auch eine administrative Einstellung bieten, die Ihnen erlaubt, das Standardverhalten für optionale Kompatibilität mit Adobe CF zu wählen.
Mein Verständnis war, dass genau wie Java kalte Fusion eine Referenz nach Wert übergeben. Dies unterscheidet sich subtil von einer Referenzübergabe, denn wenn eine Funktion ein Objekt als Argument "in" passiert und dann wird "in" innerhalb der Funktion zu einem völlig anderen Objekt geändert, das die an die Funktion übergebene Variable nicht beeinflusst. Während in C, wo Sie wirklich durch Verweis übergeben können, die übergebene Variable betroffen wäre –
Wie Java, ColdFusion hat keine Zeiger, so dass die Definitionen von "nach Referenz" und "nach Wert" vereinfacht werden. –
Obwohl dies zutrifft (und daher gibt es glücklicherweise keinen echten "pass-by-reference", ist der Unterschied zwischen "pass-by-reference" und "pass-a-reference-by-value" immer noch wichtig). Diese Frage bezüglich Java macht eine sehr gute Arbeit, das Problem zu erklären; http://stackoverflow.com/q/40480/2187042 –