From: Ezra Zygmuntowicz Date: 2006-07-01T12:09:33+09:00 Subject: Re: Differences between irb and ruby. On Jun 30, 2006, at 7:10 PM, Minkoo Seo wrote: > Hi list. > > I've recently learned that irb and ruby (ruby interpreter) behave > differently often > and that irb is not running on ruby interpreter. > > As an example, > > [mkseo@uranus src]$ irb > irb(main):001:0> def foo > irb(main):002:1> puts "foo" > irb(main):003:1> end > => nil > irb(main):004:0> class Bar; end > => nil > irb(main):005:0> Bar.new.foo > foo > => nil > irb(main):006:0> quit > > irb let me call foo which is non-sense. > > [mkseo@uranus src]$ cat > test.rb > def foo > puts "foo" > end > class Bar; end > Bar.new.foo > [mkseo@uranus src]$ ruby test.rb > test.rb:5: private method `foo' called for # > (NoMethodError) > [mkseo@uranus src]$ > > Ruby interpreter fails as expected. > > So, here's my question. Why is irb running on its own interpreter(or > simulator or whatever)? > > > Sincerely, > Minkoo Seo When you def a method in irb outside of any class definition it actually gets added to Object i believe. Since the top level of irb outside of any class definitions is essentially running inside of Object. So that is why you can call foo from inside of class Bar since class Bar inherits from Object by default. ez $ irb irb(main):001:0> self.class => Object -Ezra