我在試着理解這個函數。self.class_eval << DEF ... DEF
我可以看到的是一個屬性和類型傳遞給opal
()方法。
然後type_name
只要type
是Symbol
或String
需要從type
其值。否則,在type
上調用name
方法。我想象name
方法類似於class
方法來獲得type
參數的類。
後self.class_eval
我有點失落,但我的猜測是這是定義可能是一個代碼塊被添加到self
引用的類。
這是如何工作我不確定。
如果有人能解釋self.class_eval << DEF
後發生了什麼,我們將不勝感激。
def opal(attr, type)
self.ds "#{attr}_id"
type_name = (type.is_a?(Symbol) || type.is_a?(String)) ? type : type.name
self.class_eval <<DEF
def #{attr}
if defined?(@#{attr})
@#{attr}
else
@#{attr} = if self.#{attr}_id
#{type_name}.get(self.#{attr}_id)
else
nil
end
end
end
def #{attr}=(value)
self.#{attr}_id = value.key
@#{attr} = value
end
DEF
end
爲什麼這次被投票?它與編程有關,這個問題似乎並不清楚。 – 2009-06-10 05:00:55