Когда вы включаете Foo в вашу программу, но вне какого-либо класса или метода, он включается в текущую область видимости, которая является объектом main
.
Вы можете проверить это, изменив метод bar наследующее
def bar
print "InBar class: #{self.class} value: #{self}\n"
end
и затем добавление следующих 2 строк в конце
2.bar
Fixnum.bar
Это даст вам следующий вывод
There is no Bar.bar
InBar class: Object value: main
InBar class: Class value: Bar
InBar class: Bar value: #<Bar:0x21ecec>
InBar class: Fixnum value: 2
InBar class: Class value: Fixnum