Remember that Object is an instance of Class, which inherits from Object.

On 08/11/2014, Arup Rakshit <aruprakshit / rocketmail.com> wrote:
>> > arup~$ irb
>> >
>> >>> def a; 10 ;end
>> >
>> > => :a
>> >
>> >>> Object.a
>> >
>> > NoMethodError: private method `a' called for Object:Class
>> > from (irb):2
>> > from /Users/shreyas/.rvm/rubies/ruby-2.1.4/bin/irb:11:in `<main>'
>> >
>> >>> Object.send(:a)
>> >
>> > => 10
>> >
>> >>> Object.new.a
>> >
>> > NoMethodError: private method `a' called for #<Object:0x007f8c5a150430>
>> > from (irb):4
>> > from /Users/shreyas/.rvm/rubies/ruby-2.1.4/bin/irb:11:in `<main>'
>> >
>> >>> Object.new.send(:a)
>> >
>> > => 10
>>
>> Your test does not prove anything about a singleton method because it
>> does not show where the method is defined.
>>
>> Kind regards
>>
>> robert
>
> What I meant to say, is, Why I am able to call a method on Object as well as
>
> Object.new. Generally,
>
> arup@linux-wzza:~> irb
>>> class Foo
>>>   def bar
>>>     12
>>>     end
>>>   end
> => nil
>>> Foo.bar
> NoMethodError: undefined method `bar' for Foo:Class
>         from (irb):6
>         from /home/arup/.rvm/rubies/ruby-2.0.0-p451/bin/irb:12:in `<main>'
>>> Foo.new.bar
> => 12
>>>
>
> Here `bar` is an instance method of Foo, that's why Foo.bar didn't work.
> Pretty clear, but Foo.new.bar work.
>
> But in case main posted example, Object.new.a and Object.a both work. Which
>
> made me confused. I don't know why...
>
>
> --
> ================
> Regards,
> Arup Rakshit
> ================
> Debugging is twice as hard as writing the code in the first place.
> Therefore,
> if you write the code as cleverly as possible, you are, by definition, not
> smart enough to debug it.
>
> --Brian Kernighan
>


-- 
  Matthew Kerwin
  http://matthew.kerwin.net.au/