[NOOB] respond_to? failing

I’ve been checking respond_to? before calling send() for ages but today
its failing in a simple case.

I define a method outside of a class or module. send() works but
respond_to? fails. You could define a method in irb and check for
respond_to?

Where are these methods getting defined if not in Object?

Here’s a snippet you can try:

#!/usr/bin/env ruby

def testme
puts “inside testme”
end

if respond_to? :testme
send :testme
else
puts “sorry”
end


I just tried out “defined? :testme” and that works, but I’d still like
to know which is better to use, and why respond_to fails.

thx
rahul

R… Kumar 1.9.1 OSX wrote:

I’ve been checking respond_to? before calling send() for ages but today
its failing in a simple case.

I define a method outside of a class or module. send() works but
respond_to? fails. You could define a method in irb and check for
respond_to?

Where are these methods getting defined if not in Object?

Here’s a snippet you can try:

#!/usr/bin/env ruby

def testme
puts “inside testme”
end

if respond_to? :testme
send :testme
else
puts “sorry”
end


I just tried out “defined? :testme” and that works, but I’d still like
to know which is better to use, and why respond_to fails.

thx
rahul

That’s because the #testme method you defined is automatically made
private and #respond_to? checks only for public methods unless you
instruct it otherwise by passing true as a second argument.

#ruby -v: ruby 1.9.1p429 (2010-07-02 revision 28523) [x86_64-linux]
irb(main):001:0> def testme
irb(main):002:1> end
=> nil
irb(main):003:0> respond_to?(:testme)
=> false
irb(main):004:0> respond_to?(:testme, true)
=> true
irb(main):005:0> public_methods.include?(:testme)
=> false
irb(main):006:0> private_methods.include?(:testme)
=> true
irb(main):007:0> public :testme
=> Object
irb(main):008:0> respond_to?(:testme)
=> true
irb(main):009:0>


Marvin

Marvin Gülker wrote:

That’s because the #testme method you defined is automatically made
private and #respond_to? checks only for public methods unless you
instruct it otherwise by passing true as a second argument.


Marvin

Thanks a lot. Is this mentioned in some document or Pickaxe. I’d like to
know why this is so, and what other rules there are such as this one.

thx, rahul.