是否可以将我自己的方法附加到有限区域的另一个类?
如果是这样,有人可以向我展示更好的做法,还是应该使用像deligate
之类的东西来做这件事?
情况是这样的:在接收,生成和传递B类实例的A类中,
我想在b
上添加一些方法,而不必在A类之外访问这些新方法。
答案 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_get
,instance_variable_set
和send
来访问所需对象中的任何数据。这非常难看。