[NOOB] respond_to? failing

  • Thread starter R.. Kumar 1.9.1 OSX
  • Start date
R

R.. Kumar 1.9.1 OSX

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
 
M

Marvin Gülker

R.. Kumar 1.9.1 OSX said:
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>
 
R

R.. Kumar 1.9.1 OSX

Marvin said:
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.

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,067
Latest member
HunterTere

Latest Threads

Top