On 09/02/2009, David Masover <ninja / slaphack.com> wrote:

>
>  Either way, I would put the burden back on you. Why is this so dangerous?
> Why is it any more dangerous than the other duck typing tricks Rubyists use
> every day? Why shouldn't I be able to do:
>
>  a.method(:foo).unbind.bind(b)
>
>  when a and b aren't related, but I happen to know they share a common
> theme? After all, what ties the method to the object -- isn't it mostly
> going to be calling instance methods, and occasionally accessing instance
> variables -- so why should 'self' be exempted from the "quacks like" rule?
>

Actually you sort of can except the binding is not permanent.

module Kernel

  module Q175
    Require = Kernel.instance_method :require
    def scan
      ...
    end
  end

  undef_method :require
  def require file
    loc = Q175::scan file
    res = Q175::Require.bind(self).call file
    STDERR.puts "require: #{file} => #{loc}" if res && loc
    res
  end
end

Thanks

Michal