我正在阅读《The Well-Grounded Rubyist》这本书,我突然想到了这个问题。我知道在 Ruby 中可以重新打开一个类并覆盖该方法。
例子:
class A
def x
"First definition of x"
end
def x
"Second definition of x"
end
end
test = A.new
test.x #returns "Second definition of x"
基于上面的结果,我很好奇是否可以attr_accessor
用我自己的(随机)定义覆盖类方法。这就是我的想法:
class Dummy
attr_accessor :test
def self.attr_accessor(method_name)
puts "Overwrite the default functionality of attr_accessor by printing this text instead."
end
end
d = Dummy.new
d.test #not sure why this returns nil instead of putting my message
Dummy.attr_accessor(test) #fails because of ArgumentError: wrong number of arguments (0 for 2..3)
对于上面的两个示例,我希望通过修补并提出问题来获得您的洞察力,从而更好地理解 Ruby。