[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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs