Ruby được giải thích. Các biến là tham chiếu đến dữ liệu, nhưng không phải là chính dữ liệu. Điều này tạo điều kiện sử dụng cùng một biến cho dữ liệu của các loại khác nhau.
Gán lhs = rhs sau đó sao chép tham chiếu trên rhs, không phải dữ liệu. Điều này khác với các ngôn ngữ khác, chẳng hạn như C, trong đó phép gán thực hiện sao chép dữ liệu vào lhs từ rhs.
Vì vậy, đối với lời gọi hàm, biến được truyền, giả sử x, thực sự được sao chép vào một biến cục bộ trong hàm, nhưng x là tham chiếu. Sau đó sẽ có hai bản sao của tài liệu tham khảo, cả hai đều tham chiếu cùng một dữ liệu. Một người sẽ ở trong người gọi, một người trong chức năng.
Việc gán trong hàm sau đó sẽ sao chép một tham chiếu mới vào phiên bản x của hàm. Sau đó, phiên bản x của người gọi vẫn không thay đổi. Nó vẫn là một tài liệu tham khảo cho dữ liệu gốc.
Ngược lại, sử dụng phương thức .replace trên x sẽ khiến ruby thực hiện sao chép dữ liệu. Nếu thay thế được sử dụng trước bất kỳ bài tập mới nào thì thực sự người gọi cũng sẽ thấy sự thay đổi dữ liệu trong phiên bản của nó.
Tương tự, miễn là tham chiếu ban đầu trong chiến thuật cho biến được truyền trong biến, các biến thể hiện sẽ giống với tham chiếu của người gọi. Trong khuôn khổ của một đối tượng, các biến đối tượng luôn có các giá trị tham chiếu cập nhật nhất, cho dù các biến đó được cung cấp bởi người gọi hay được đặt trong hàm mà lớp được truyền vào.
'Gọi theo giá trị' hoặc 'gọi theo tham chiếu' bị nhầm lẫn ở đây vì nhầm lẫn '=' Trong các ngôn ngữ được biên dịch '=' là bản sao dữ liệu. Ở đây trong ngôn ngữ được giải thích này '=' là một bản sao tham chiếu. Trong ví dụ, bạn có tham chiếu được truyền vào theo sau bởi một bản sao tham chiếu mặc dù '=' ghi lại bản gốc được truyền trong tham chiếu và sau đó mọi người nói về nó như thể '=' là một bản sao dữ liệu.
Để phù hợp với các định nghĩa, chúng ta phải tuân theo '.replace' vì đây là bản sao dữ liệu. Từ quan điểm của '.replace', chúng tôi thấy rằng điều này thực sự vượt qua tham chiếu. Hơn nữa, nếu chúng ta duyệt qua trình gỡ lỗi, chúng ta sẽ thấy các tham chiếu được truyền vào, vì các biến là các tham chiếu.
Tuy nhiên, nếu chúng ta phải giữ '=' làm khung tham chiếu, thì thực sự chúng ta sẽ thấy dữ liệu được truyền cho đến khi chuyển nhượng, và sau đó chúng ta sẽ không thấy nó nữa sau khi gán trong khi dữ liệu của người gọi không thay đổi. Ở cấp độ hành vi, giá trị này được truyền theo giá trị miễn là chúng ta không coi giá trị được chuyển thành giá trị tổng hợp - vì chúng ta sẽ không thể giữ một phần của nó trong khi thay đổi phần khác trong một nhiệm vụ duy nhất (như nhiệm vụ đó thay đổi tham chiếu và bản gốc đi ra khỏi phạm vi). Cũng sẽ có một mụn cóc, trong đó các biến thể hiện trong các đối tượng sẽ là các tham chiếu, cũng như tất cả các biến. Do đó, chúng tôi sẽ buộc phải nói về việc chuyển 'tham chiếu theo giá trị' và phải sử dụng các địa điểm liên quan.