如果方法和实例都作为符号传递给一个方法,如果实例不是符号,是否有方法将现有方法绑定(bind)到对象的现有实例?
例如:
def some_method
#do something
end
some_instance = Klass.new(something)
def method_that_binds(:some_method, to: :some_instance)
#how do I do that?
end
最佳答案
你的要求有点不寻常,但可以按照你说的做:
class Person; end
harry = Person.new
barry = Person.new
def test
puts 'It works!'
end
define_method :method_that_binds do |a_method, to|
eval(to[:to].to_s).singleton_class.send(:define_method, a_method, &Object.new.method(a_method))
end
method_that_binds :test, to: :harry
harry.test
# It works! will be sent to STDOUT
barry.test
# undefined method 'test'
这实际上并没有使用命名参数,而是接受带有 to
键的散列,但您可以看到您可以按照您想要的方式调用它。它还假定您定义的方法是在 Object
上全局定义的。
关于ruby - 绑定(bind)方法到实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28706619/