Issue #8346 has been updated by marcandre (Marc-Andre Lafortune).

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`.
----------------------------------------
Bug #8346: If a module is included, its public instance methods behave like module functions
https://bugs.ruby-lang.org/issues/8346#change-39044

Author: alexeymuranov (Alexey Muranov)
Status: Rejected
Priority: Normal
Assignee: 
Category: core
Target version: 
ruby -v: 2.0.0
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


=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



-- 
http://bugs.ruby-lang.org/