Інтерпретується Рубі. Змінні - це посилання на дані, але не самі дані. Це полегшує використання однієї змінної для даних різних типів.
Призначення lhs = rhs потім копіює посилання на rhs, а не на дані. Це відрізняється від інших мов, таких як C, де присвоєння копіює дані в lhs з rhs.
Отже, для виклику функції змінна передана, скажімо x, дійсно копіюється в локальну змінну у функції, але x є посиланням. Потім будуть дві копії посилання, обидві посилання на однакові дані. Один буде в абонента, один у функції.
Потім призначення у функції копіює нове посилання на версію функції x. Після цього версія абоненту x залишається незмінною. Це все ще посилання на вихідні дані.
На відміну від цього, використання методу .replace на x призведе до рубіну для копіювання даних. Якщо замість використовується перед будь-якими новими призначеннями, то дійсно абонент також побачить зміни даних у своїй версії.
Аналогічно, доки оригінальна посилання знаходиться в такті для переданої змінної, змінні екземпляра будуть такими, які бачить абонент. У рамках об'єкта змінні екземплярів завжди мають найновіші опорні значення, незалежно від того, надані вони абонентом або встановлені у функції, в яку передано клас.
"Виклик за значенням" або "Виклик за посиланням" тут заплутаний через плутанину над "=" У компільованих мовах "=" є копією даних. Тут у цій інтерпретованій мові '=' є довідковою копією. У прикладі ви посилаєте посилання, за яким йде копія посилання, хоч '=', що клобує оригінал, переданий посиланням, і тоді люди, які говорять про нього, ніби '=', були копією даних.
Щоб відповідати визначенню, ми повинні зберігати ".замінити", оскільки це копія даних. З точки зору ".замінити" ми бачимо, що це справді проходить через посилання. Крім того, якщо ми проходимо через налагоджувач, ми бачимо передані посилання, оскільки змінні є посиланнями.
Однак якщо ми повинні зберігати '=' як систему відліку, то насправді ми отримуємо бачити передані дані до призначення, і тоді ми не отримуємо їх більше після призначення, поки дані абонента залишаються незмінними. На поведінковому рівні це передається за значенням до тих пір, поки ми не вважатимемо передане значення складовим - оскільки ми не зможемо зберегти його частину, змінюючи іншу частину в одному призначенні (як це призначення змінює посилання і оригінал виходить за межі). Також буде бородавка, в цьому екземплярі змінні в об'єктах будуть посиланнями, як і всі змінні. Таким чином, ми будемо змушені говорити про передачу "посилань за значенням" і повинні використовувати відповідні місця.