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/