ruby - 绑定(bind)方法到实例

标签 ruby metaprogramming

如果方法和实例都作为符号传递给一个方法,如果实例不是符号,是否有方法将现有方法绑定(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/

相关文章:

ruby - 清除方法的主体

r - 在 R 表达式中查找所有函数的名称

ruby-on-rails - 如何在 Ruby 中从 Savon 调用此安全 Web 服务 WSDL?

ruby - 排列成连续数字的范围

Ruby 类关系 : How do I use methods and objects from another class?

c++ - 如何编写由函数模板化的原型(prototype)转换?

ruby - 使用 Ruby 编写一个简单的 Windows 7 GUI 应用程序

ruby - 野科切 ruby : Iterate over table rows with no class name

c++ - 找到可以数到 N 的最小整数类型

c++ - __FILE__ 编译时的宏操作处理