Reputation: 4976
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
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
Reputation: 21740
method(:bar)
in the method scope. You can call that one, it's still bound to self
.
Upvotes: 0