Project

General

Profile

Actions

Bug #11779

closed

Module#using does not make sense as a method

Added by bughit (bug hit) over 8 years ago. Updated almost 3 years ago.

Status:
Feedback
Target version:
-
[ruby-core:71862]

Description

  1. it can't be called from another method
  2. the receiver must be self
  3. since refinements are lexically scoped the self receiver must match the currently open class

#3 is particularly curious

module Refinement
  refine String do
    def refined?
      true
    end
  end
end

module Foo
  def self.refined?
    ''.refined? rescue false
  end
end


module Bar
  def self.refined?
    ''.refined? rescue false
  end
  Foo.module_eval do
    using Refinement

  end
end

p Foo.refined? #false

The module_eval #using call does not raise (it's not from a method and the receiver is self), but evidently because currently open class does not match self, it does not do anything. So it should at least raise.

So #using, though a method, does not function as a method, which is misleading.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0