Comment puis-je appeler le constructeur de parents?
module C
attr_accessor :c, :cc
def initialization c, cc
@c, @cc = c, cc
end
end
class B
attr_accessor :b, :bb
def initialization b, bb
@b, @bb = b, bb
end
end
class A < B
include C
attr_accessor :a, :aa
def initialization (a, b, c, aa, bb, cc)
#call B::initialization - ?
#call C::initialization - ?
@a, @aa = a, aa
end
end
Merci.
Tout d'abord, votre méthode devrait être initialize
, pas initialization
. Ensuite, vous pouvez utiliser super
pour appeler la méthode de la classe mère. En ce qui concerne l'appelant C
's initialisateur dans A
, pour plus de clarté, je vous recommanderais de fractionnement des trucs d'initialisation dans une fonction différente, appelez simplement cette fonction directement. Il est facile à mettre en œuvre et plus clair.
Utilisez la méthode super
! Ruby n'a pas de héritage multiple cependant.
class B
attr_accessor :b, :bb
def initialize(b, bb)
@b, @bb = b, bb
end
end
module C
end
class A < B
include C # <= if C was a class, you'd get: TypeError: wrong argument type Class (expected Module)
attr_accessor :a, :aa
def initialize(a,b,aa,bb)
@a, @aa = a, aa
super(b, bb) # <= calls B#initialize
end
end
a = A.new(1,2,3,4)
puts a.inspect # => #<A:0x42d6d8 @aa=3, @a=1, @b=2, @bb=4>
Ce code ci-dessous imprimera:
A.PROC1 B.PROC1 C.PROC1
module A
def proc1
puts "A.proc1"
super
end
end
class B
def proc1
puts "B.proc1"
end
end
class C < B
include A
def proc1
super
puts "C.proc1"
end
end
C.new.proc1