I thought I had come up with a clever way to call a method which has been
overridden:

  module Foo
    def to_s
      'just another Foo'
    end
  end

  class Bar
    include Foo

    def to_s
      'proud to be a Bar'
    end

    def foo_to_s
      Foo.instance_method('to_s').bind(self).call
    end
  end

  puts Bar.new.to_s
  puts Bar.new.foo_to_s

And it works!

  proud to be a Bar
  just another Foo

However, if Foo is a class and Bar subclasses it, it doesn't work:


  proud to be a Bar
  ./test.rb:24:in `bind': bind argument must be an instance of Foo
(TypeError)
          from ./test.rb:24:in `foo_to_s'
          from ./test.rb:29

So, my question is this:  Why must bind's argument be an instance of Foo?
Why not just a kind_of Foo?  Could this be changed?  Easily?

Chris