Ruby的Object#define_method vs Module#define_method

时间:2011-05-21 19:18:15

标签: ruby

任何人都可以详细说明红宝石Object#define_methodModule#define_method之间的差异以及它们通常用于何处?

2 个答案:

答案 0 :(得分:5)

Object#define_method实际上是Module#define_method

pry(main)> Object.method(:define_method).owner
=> Module
pry(main)> Module.method(:define_method).owner
=> Module

答案 1 :(得分:5)

Object#define_method不存在:

o = Object.new
o.define_method
#NoMethodError: undefined method `define_method' for #<Object:0x1448a80>

但是,Object.define_method存在:

Object.define_method
#NoMethodError: private method `define_method' called for Object:Class

那是因为Object是类Class的对象,而ClassModule的子类:

Object.class # => Class
Class.ancestors # => [Class, Module, Object, Kernel, BasicObject]

因此,当您致电Object.define_method时,您正在呼叫Module#define_method

请记住,类是类Class的对象,它会像泥一样清晰!