Трудно понять, чего вы на самом деле хотите.Если вы хотите получить разумные ответы, вам нужно будет предоставить полный пример кода того, чего вы хотите достичь (например, в опубликованном коде отсутствуют определения для методов cat_that_has_name
и so_something
).Вам также нужно будет опубликовать полную спецификацию того, что именно вы ожидаете от метода as
, с примерами использования и в идеале с комплектом тестов.В конце концов, как мы узнаем, что наш ответ правильный, если вы не определили, что означает «правильный»?
Лучшее, что я мог бы расшифровать из вашего загадочного вопроса, это что-то вроде этого:
class Object
def as(name)
s = self
Object.send(:define_method, name) { s }
Object.send(:private, name)
end
end
Но нет способа узнать, работает ли это, потому что если я попытаюсь запустить ваш пример кода, я получу NoMethodError
для cat_that_has_name
и еще один NoMethodError
для so_something
.
Также обратите внимание, что ваш вопрос самодостаточен: в строке темы вы спрашиваете о методе замены =
(т.е. создании переменных), но в своем вопросе вы говорите о создании методов , что будет означать, что выищите замену для def
, а не для =
.Опять же, было бы намного проще правильно ответить, если бы был тестовый набор.