Ruby — Использование class_eval для определения методов

Я провожу урок SaaS в Стэнфорде, пытаясь выполнить часть 5 этого задания

Мне очень трудно понять эту концепцию, вот что я пытался сделать:

class Class
  def attr_accessor_with_history(attr_name)
    attr_name = attr_name.to_s
    attr_reader attr_name
    attr_reader attr_name + '_history'
    class_eval %Q'{def #{attr_name}(a);#{attr_name}_history.push(a) ; end;}'
  end
end

Я, вероятно, делаю много чего неправильно, прочитал главу The Book Of Ruby о метапрограммировании и до сих пор не понимаю, может ли кто-нибудь помочь мне понять это?

22
задан 8vius 5 March 2012 в 02:52
поделиться