On Jun 12, 2006, at 22:22, Joel VanderWerf wrote: > Mark Volkmann wrote: >> I understand that methods defined at the top-level, not in any class, >> become methods of the class Object. Pickaxe 2 says in its discussion >> of the top-level environment (page 293 in my paper copy) "we're >> actually creating (private) instance methods for class Object". I >> think the "(private)" part is wrong because I can invoke top-level >> methods using a receiver, which I shouldn't be able to do for private >> methods. >> >> Here's an example. >> >> def foo; puts 'in foo'; end >> class Bar; end >> bar = Bar.new >> bar.foo >> >> Am I misunderstanding this? >> > > Don't you get an error when you call bar.foo? > > $ ruby -e " > def foo; puts 'in foo'; end > class Bar; end > bar = Bar.new > bar.foo > " > -e:5: private method `foo' called for #<Bar:0xb7dcccec> > (NoMethodError) Am I right in guessing that Mark is using irb to evaluate this code, and that Joel is not? irb has some odd hooks in it, in my experience: ruby -e "def foo; end; puts Object.private_methods.include?('foo')" true irb(main):001:0> def foo; end; puts Object.private_methods.include? ('foo') false matthew smillie.