主要的Ruby 2.0 define_method

define_method是Module的一种方法.

Ruby 2.0中,define_method可以在顶层使用;它不必在类或模块中.

define_method :kick do
  puts "method"
end

在Ruby 1.9中,主对象没有define_method方法.

define_method :kick
# => NoMethodError: undefined method `define_method' for main:Object

Ruby 2.0如何实现这一点?

最佳答案 我也很好奇这个功能,并使用irb尝试一下.请看一下:

% irb
2.0.0-p353 :001 > method(:define_method)
=> #<Method: main.define_method> 
2.0.0-p353 :002 > private_methods(false)
=> [:public, :private, :include, :using, :define_method, :irb_exit_org, :default_src_encoding, :irb_binding] 
2.0.0-p353 :003 > singleton_class.private_instance_methods(false)
=> [:public, :private, :include, :using, :define_method, :irb_exit_org] 

它表明define_method是主对象的私有单例方法(顶级自我).

点赞