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.