Object#define_method does not exist:
o = Object.new o.define_method
However, Object.define_method exists:
Object.define_method #NoMethodError: private method `define_method' called for Object:Class
This is because Object is an object of class Class , and Class is a subclass of Module :
Object.class
Therefore, when you call Object.define_method , you call Module#define_method .
Just remember that classes are objects of class Class , and it will be as clear as mud!
source share