This is basically how it should be done :) There are several possible improvements, though, depending on what you really want to achieve.
Child ( parent accessor). , , . parent .
, :
class Child
extend Forwardable
def_delegator :@parent, :var, :parent_var
def_delegator :@parent, :increase
attr_accessor :var
def initialize(parent, num)
@parent = parent
@var = num
end
def sum
@parent.increase
@parent.var + var
end
end
Ruby Forwardable, . Child.
parent = Parent.new(1)
child = Child.new(parent, 2)
child.var
child.parent_var
child.increase
parent.var
, , , .
parent :
class Parent
def child(num)
Child.new(self, num)
end
end
Factory Method, , . Child .
parent = Parent.new(1)
child = parent.child(2)