如何在Ruby中仅使用其实例变量重新打开一个类?

TG-*_*G-T 1 ruby

我想创建一个与传递给它的类混淆的函数.重新打开这些类以添加功能的最惯用方法是什么?这就是我的意思:

def class_messer(target_object)
  #would like to reopen class here with something like:
  class target_object.class
    #add methods
  end
end
Run Code Online (Sandbox Code Playgroud)

显然语法不起作用.我可以得到target_object的类并评估一些字符串,但这感觉很糟糕.有没有比较惯用的方法呢?

rat*_*rio 5

我想你在找class_eval.如果你想重新打开一个类而你没有那个常量,而是一个引用,你可以调用class_eval它并传递一个代码块(甚至是一个字符串)来在该类上下文中进行评估.

def class_messer(target_object)

  # assuming that target_object is an instance of desired class

  target_object.class.class_eval do
    #add methods
  end

end
Run Code Online (Sandbox Code Playgroud)