将方法附加到ruby中受限上下文中的另一个类

时间:2011-12-21 05:24:56

标签: ruby class

是否可以将我自己的方法附加到有限区域的另一个类?

如果是这样,有人可以向我展示更好的做法,还是应该使用像deligate之类的东西来做这件事?

情况是这样的:在接收,生成和传递B类实例的A类中, 我想在b上添加一些方法,而不必在A类之外访问这些新方法。

2 个答案:

答案 0 :(得分:0)

这些被称为singleton methods。您可以向任何对象添加方法,只影响该实例,而不是它所创建的整个类。

some_object = Whatever.new
other_object = Whatever.new

class << some_object
  def another_method
    ...
  end
end

some_object.another_method # works
other_object.another_method # error: no such method another_method

您还可以使用define_singleton_method

some_object.define_singleton_method(:foo) do |arg1, arg2|
  puts "Called with #{arg1} and #{arg2}"
end

some_object.foo(7, 8)

还有instance_eval,但你明白了;)

答案 1 :(得分:0)

您可以在B类中编写一个私有方法,该方法将A对象作为参数,并使用instance_variable_getinstance_variable_setsend来访问所需对象中的任何数据。这非常难看。