Я изучаю Ruby и наткнулся на код, похожий на приведенный ниже, который показывает разницу между переменными экземпляра и переменными экземпляра класса. Я протестировал его в своей консоли, и он работает так, как описано (выводит «Джон»). Чего я не понимаю, так это того, как define_method
получает доступ к переменной экземпляра @name
без предшествующего name
с @
? Есть ли у него специальные возможности, которые позволяют ему это делать?
class User
attr_reader :name
def self.name
"User"
end
def initialize(name)
@name = name
end
define_method(:output_name) do
puts name
end
end
user1 = User.new("John")
user1.output_name #=> “John”
attr_reader :name
создает геттер для переменной экземпляра@name
, например.def name; @name; end
это метод, который вызывается вoutput_name
и в данном случае не имеет ничего общего сdefine_method
- person engineersmnky   schedule 28.04.2020