Các đối tượng ColdFusion (tức là các CFC được gọi thông qua cfobject) thường được chuyển qua tham chiếu hoặc theo giá trị (được sao chép trong bộ nhớ)? Và liệu có thể ép Coldfusion truyền một vật thể theo một trong hai cách?Các đối tượng ColdFusion có được thông qua tham chiếu hoặc theo giá trị không?
Trả lời
Đối tượng ColdFusion được chuyển theo tham chiếu. Không thực sự là một cách để truyền một đối tượng theo giá trị, nhưng bạn có thể tạo một bản sao bằng cách sử dụng hàm duplicate().
Vâng, hãy nhớ rằng sử dụng bản sao() doesn't work in MX 7 để sao chép một số thứ nhất định, như CFC và COM, CORBA và các đối tượng Java. Tuy nhiên, bạn can copy a CFC in CF 8.
Các đối tượng phức tạp như cấu trúc và CFC được chuyển qua tham chiếu, nhưng nếu bạn chuyển một mảng tới UDF, nó sẽ được truyền theo giá trị. Điều này làm cho nó không thể viết một hàm do người dùng định nghĩa để thay đổi một mảng giống như các hàm mảng dựng sẵn. Nếu bạn thực sự cần phải vượt qua một mảng bằng cách tham chiếu, bạn có thể bọc nó trong một cấu trúc, và sau đó nó sẽ được chuyển qua tham chiếu.
FWIW, mảng cũng được chuyển bằng tham chiếu trong công cụ Railo CFML, như nhiều nhà phát triển tin rằng họ nên làm. Railo 3.1 cũng được yêu cầu cung cấp một cài đặt quản trị để cho phép bạn chọn hành vi mặc định, cho khả năng tương thích tùy chọn với Adobe CF.
Sự hiểu biết của tôi là giống như kết hợp nhiệt lạnh java đã truyền tham chiếu theo giá trị. Điều này là khác biệt một cách tinh tế khi truyền tham chiếu bởi vì nếu một hàm chuyển một đối tượng làm đối số 'in' và sau đó' in' được thay đổi trong hàm thành một đối tượng hoàn toàn khác không ảnh hưởng đến biến được truyền cho hàm. Trong khi đó trong C, nơi bạn thực sự có thể vượt qua bằng cách tham chiếu biến thông qua sẽ bị ảnh hưởng –
Giống như Java, ColdFusion không có con trỏ, do đó, các định nghĩa "theo tham chiếu" và "theo giá trị" được đơn giản hóa. –
Trong khi điều này là đúng (và do đó không có tham chiếu theo tham chiếu thực sự, may mắn) sự khác biệt giữa tham chiếu truyền qua và tham chiếu-by-giá trị vẫn còn quan trọng. Câu hỏi này liên quan đến java làm một công việc rất tốt để giải thích vấn đề; http://stackoverflow.com/q/40480/2187042 –