Я вважаю глибоко дивним, що це можливо в Рубі (я не одразу скажу як):
obj = #code redacted
print obj.state # Some value.
LValue = obj
print obj.state # Different value!
Ваше завдання - створити код приблизно такої форми. Створіть об’єкт і призначте його змінній. Він повинен мати певний визначений атрибут (або детермінований, idempotent метод), як state
вище, який змінюється після присвоєння об'єкту новому ідентифікатору ( LValue
вище), навіть якщо ви все ще використовуєте старий ідентифікатор ( obj
вище) для посилання на нього.
Редагувати для наголосу : state
або еквівалент повинен бути ідентичним, тому створення аксесуара, який змінює значення, або з будь-якої іншої причини повертає різні результати при виклику кілька разів поспіль, не є правильним рішенням. Або, простіше кажучи, це має бути завдання, яке змінює стан.
Будь-яка мова із призначенням є прийнятною, хоча, мабуть, є деякі, де немає повністю законного рішення. Я опублікую свою відповідь Рубі, якщо ніхто більше не отримає її через кілька днів, і прийму відповіді з найвищими голосами на постійній основі.
(setq a (list "val")) (setq b (nconc a "val2"))
наприклад. a
в кінцевому підсумку оцінюється як ("val" . "val2")
на той момент.
LValue = obj
чи потрібна лінія,state
щоб насправді змінити? (Я міг просто зробити власність на C #, що збільшується щоразу, коли ви отримуєте її)