我正在学习 Ruby,偶然发现了一些类似于下面的代码,它显示了实例变量和类实例变量之间的区别。我已经在我的控制台中对其进行了测试,它的工作方式与描述的一样(输出“John”)。我不明白的是如何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”