Bug #8346
closed
If a module is included, its public instance methods behave like module functions
Added by alexeymuranov (Alexey Muranov) almost 11 years ago.
Updated almost 11 years ago.
Description
=begin
This behavior is unexpected to me:
module M
def f
1
end
end
include M
M.f # => 1
After including the module (({M})), the method (({f})) becomes an instance method of the module for no apparent reason. I would expect an error (instance method not found).
=end
Compare with:
module M
def self.f
0
end
def f
1
end
end
include M
M.f # => 0
alexeymuranov (Alexey Muranov) wrote:
=begin
This behavior is unexpected to me:
module M
def f
1
end
end
include M
Here you have included M in Object, which is why the method is now available on M itself.
Object.method_defined?(:f) => true
- Status changed from Open to Rejected
jacknagel (Jack Nagel) wrote:
Here you have included M in Object, which is why the method is now available on M itself.
Indeed. Another way to understand it: the include has the same effect as doing a def foo
at the top level.
You can extend M
instead of you want to include M
only in the global scope and not in Object
.
Ok, thanks for the explanation.
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0