2008-10-20 11 views

Antwort

28

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.

+0

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 –

+0

Wie Java, ColdFusion hat keine Zeiger, so dass die Definitionen von "nach Referenz" und "nach Wert" vereinfacht werden. –

+0

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 –

10

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.

4

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.