From: Minkoo Seo Date: 2006-07-01T13:19:24+09:00 Subject: Re: Differences between irb and ruby. ------=_Part_6265_24954827.1151727561220 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi Ezra. You've got it wrong. The point is that though a method that is defined outside of any class becomes automatically part of Object, it can't be called with exact receiver because the method is *private*. In other words, # foo is private method of Object def foo .. end class Bar; end # This is okay, because I'm calling self.foo and we do not # need to state self as receiver. foo # This is completely wrong. Private method can't be called # with exact receiver. Bar.new.foo Hope this helps. Sincerely, Minkoo Seo On 7/1/06, Ezra Zygmuntowicz wrote: > > > 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 > > > > ------=_Part_6265_24954827.1151727561220--