在 Ruby 中进行元编程非常棒,因为我经常用它来模拟基于原型的编程,并快速编写原型解决方案来测试其可行性。因此,我想知道以下代码片段之间是否存在任何重要差异:
(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)
组合来定义单例方法的情况,并且我想知道这两者之间是否有本质区别。
define_singleton_method(:method_name) do ... end
。 - Marc-André Lafortune