Sir Robert
Sir Robert

Reputation: 4976

How do I get an instance method bound to a variable in ruby?

How can I get an instance method in a variable? For example:

class Foo
  def bar
    puts "bar"
  end
end

I want to be able to manipulate the "bar" instance method (for example, to pass it around). How can I do it?

I know that I can get the class constant with

foo_class = Kernel.const_get("Foo")

Is there anything similar I can do to get Foo#bar?

Upvotes: 5

Views: 801

Answers (3)

tokland
tokland

Reputation: 67910

It seems you need an UnboundMethod:

class Foo
  def initialize(value)
    @value = value
  end

  def bar
    @value
  end
end   

unbound_bar = Foo.instance_method(:bar)
p unbound_bar.bind(Foo.new("hello")).call
#=> "hello"

Upvotes: 7

maerics
maerics

Reputation: 156682

See the Ruby documentation for UnboundMethod.

Upvotes: 0

Reactormonk
Reactormonk

Reputation: 21740

method(:bar) in the method scope. You can call that one, it's still bound to self.

Upvotes: 0

Related Questions