我讀爲什麼是悽美指南紅寶石,並在第6章,他用這樣的代碼:使用`instance_eval`
class Creature
# Get a metaclass for this class
def self.metaclass; class << self; self; end; end
...
def self.traits(*arr)
# 2. Add a new class method to for each trait.
arr.each do |a|
metaclass.instance_eval do
define_method(a) do |val|
@traits ||= {}
@traits[a] = val
end
end
end
end
end
爲什麼他呼籲Creature
類的元類instance_eval
?由於instance_eval
添加方法metaclass
,他只是這樣做:
def self.metaclass; self; end;
還是我錯了?有沒有更優雅的解決方案呢?
雖然我喜歡悽美的引導,當它涉及到元編程是完全過時。所有_why試圖做的就是在'metaclass'對象上調用'define_method',這對'define_singleton_method'來說現在是微不足道的。 – Max