On Tue, Mar 6, 2012 at 5:34 PM, Ralph Shnelvar <ralphs / dos32.com> wrote: > Consider; > > - - - > > class Dance > ¨Âåæ æï> ¨Âõô¢æïï éó åøåãõôåä> 2 > ¨Âîä > end > > class Boogy < Dance > ¨Âåæ âá> ¨Âõô¨æïï®ãìáóó> ¨Âîä > end > > b = Boogy.new > > b.foo # prints "foo is executed" ... expected. > > b.bar # prints "foo is executed\nFixnum" ... not expected! > > - - - > > Let's focus on the line > ¨Âõô¨æïï®ãìáóó> > So let's say I'm in the middle of a debugging session trying to debug thear method. > > I see this thing called "foo" and I want to know what it is. > > So I > ¨Âõô¨æïï®ãìáóó> > Since everything in ruby is an object and all objects have classes, I'm expecting to print out the class of this thing called foo. You do not want the class but rather the kind of "foo". "local variable" is not a class. You can do irb(main):032:0> class Bogey < Dance irb(main):033:1> def bar irb(main):034:2> a=0 irb(main):035:2> printf "foo -> %p\n", defined?(foo) irb(main):036:2> printf "a -> %p\n", defined?(a) irb(main):037:2> printf "none -> %p\n", defined?(none) irb(main):038:2> end irb(main):039:1> end => nil irb(main):040:0> Bogey.new.bar foo -> "method" a -> "local-variable" none -> nil => nil > What happens, though is that foo gets executed (which is not what I want)nd returns 42 ... whose class is Fixnum. > Questions: > How can I tell what class of object foo is without executing it? if you see "foo=" it's a local variable, if not it's a method or does not exist. If your method is so long that you cannot find anything any more you need to refactor. :-) > Is there a class called "Method" in the Ruby class hierarchy? irb(main):001:0> m = 1.method :to_s => #<Method: Fixnum#to_s> irb(main):002:0> m.unbind => #<UnboundMethod: Fixnum#to_s> > What class of object does define_method return? Why don't you try and see? It's as easy as irb(main):004:0> x = Fixnum.send(:define_method, :foo) { 123 } => #<Proc:0x8666c84@(irb):4 (lambda)> irb(main):005:0> x.class => Proc irb(main):006:0> class Fixnum irb(main):007:1> define_method(:bar){ 786 } irb(main):008:1> end => #<Proc:0x8613840@(irb):7 (lambda)> Cheers robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/