From: Marvin Gülker on
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/.

From: R.. Kumar 1.9.1 OSX on
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.
--
Posted via http://www.ruby-forum.com/.