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
-- 
Posted via http://www.ruby-forum.com/.