Короткий ответ: если бы это был "Hello World", это было бы абсолютно безумным разговором. Единственные два вывода, которые имеют какой-либо смысл, - это «Hello qux» или «Qux World». В данном случае «qux World» - это вывод, потому что это порядок:
Sample
расширяется Foo
, initialize
унаследовано от Foo
Sample
включает Bar
, initialize
переопределено
Sample
определяет initialize
, который вызывает super
, что указывает на реализацию самого последнего предка initialize
, в данном случае Bar
s
Надеемся, это должно прояснить ситуацию:
class Foo
def initialize(a)
puts "Hello #{a}"
end
end
module Bar
def initialize(b)
super # this calls Foo's initialize with a parameter of 'qux'
puts "#{b} World"
end
end
class Sample < Foo
include Bar
def initialize(c)
super # this calls Bar's initialize with a parameter of 'qux'
end
end
Sample.new('qux')
Выход:
Hello qux
qux World