【发布时间】:2011-03-11 09:26:15
【问题描述】:
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
标签: ruby metaprogramming