From: Marvin Gülker on 28 Jul 2010 16:27 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 28 Jul 2010 23:34 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/.
|
Pages: 1 Prev: [NOOB] respond_to? failing Next: rubyw, RuntimeError, capturing the stack, FXRuby |