tym module umieszcza go powyżej moduł/klasa, która jest uwzględniana w hierarchii klas. Innymi słowy, A # foo nie jest super od B # foo, ale raczej odwrotnie.
Jeśli myślisz o włączeniu modułu jako sposobie dziedziczenia wielokrotnego, ma to sens, include SomeModule
to sposób na powiedzenie: "Traktuj SomeModule tak, jakby to była dla mnie klasa rodzicielska".
Aby uzyskać wyjście chciałeś trzeba odwrócić włączenia tak że B zawiera:
module A
def foo; puts 'A' end
end
module B
def foo; puts 'B'; super; end
end
B.module_eval { include A } # Reversing the inclusion
class C
include B # not include A
end
puts C.new.foo
Edytowanie w odpowiedzi na komentarz:
wówczas obejmować zarówno A i B C z B zawarta po A:
# A and B as before without including B in A.
class C
include A
include B
end
lub łatka A w C i nie przejmuj się B.
# A as before, no B.
class C
include A
def foo; puts 'B'; super; end
end
Jedynym sposobem pracy jest to, że w sposób odnośników C oznacza grupę -> B -> A i nie ma sposobu, aby to zrobić bez włączenia B do C
To był przypadek 'alias_method_chain'. – clyfe