Метапрограммирование в рубине велико, потому что я постоянно использую его для эмуляции прототипов на основе программирования и быстрого написания прототипов решения некоторых проблем, чтобы проверить их жизнеспособность. Поэтому я хотел бы знать, есть ли существенное различие между следующими фрагментами кода:
(class << some_object; self; end).class_eval do
define_method(:method_name) do ... method body ... end
end
и
(class << some_object; self; end).instance_eval do
define_method(:method_name) do ... method body ... end
end
Обе версии кода определяют одноэлементный метод, и я еще не сталкивался с чем-либо, что вынудило меня выбрать комбинацию (instance_eval, define_method)
по сравнению с комбинацией (class_eval, define_method)
для определения метода singleton, и мне интересно, между ними существует существенное различие.