[#393742] Getting the class of an object. — Ralph Shnelvar <ralphs@...32.com>

Consider;

14 messages 2012/03/06

[#393815] arcadia IDE requires tcl/tk and ruby-tk — Thufir Hawat <hawat.thufir@...>

which or where tcl and tk does arcadia require? Is this a gem which I

13 messages 2012/03/13

[#393952] What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...>

Hi!

18 messages 2012/03/21
[#393953] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

Active Support has recently added qualified_const_* methods to Module

[#393954] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

Ah, that won't work in 1.8.

[#393959] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/21

On Wed, Mar 21, 2012 at 16:43, Xavier Noria <fxn@hashref.com> wrote:

[#393960] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

On Wed, Mar 21, 2012 at 8:17 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#393961] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/21

On Wed, Mar 21, 2012 at 20:48, Xavier Noria <fxn@hashref.com> wrote:

[#393962] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

On Wed, Mar 21, 2012 at 9:51 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#393967] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/22

On Wed, Mar 21, 2012 at 22:11, Xavier Noria <fxn@hashref.com> wrote:

[#393969] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/22

On Thu, Mar 22, 2012 at 6:15 AM, Nikolai Weibull <now@bitwi.se> wrote:

[#394154] uninitialized constant SOCKSSocket — Resident Moron <lists@...>

I am running ruby 1.9.3 on a linux box. I would like to use

10 messages 2012/03/29

[#394160] Why z = Complex(1,2) rather than z = Complex.new(1,2)? — Ori Ben-Dor <lists@...>

What's this syntax, z = Complex(1,2), as opposed to z =

14 messages 2012/03/29

[#394175] shoes no such file to load -- rubygems — Mr theperson <lists@...>

I have installed shoes to develop GUI applications but when I try and

13 messages 2012/03/29

[#394201] Can't open url with a subdomain with an underscore — Jeroen van Ingen <lists@...>

I try to open the following URL: http://auto_diversen.marktplaza.nl/

10 messages 2012/03/30

[#394222] Ruby openssl ECC help plz — no name <lists@...>

I am confused on how to properly export public ECC key. I can see it

13 messages 2012/03/31

Re: Getting the class of an object.

From: Robert Klemme <shortcutter@...>
Date: 2012-03-06 18:15:18 UTC
List: ruby-talk #393748
On Tue, Mar 6, 2012 at 5:34 PM, Ralph Shnelvar <ralphs@dos32.com> wrote:
> Consider;
>
> - - -
>
> class Dance
> ef foo
> uts "foo is executed"
> 2
> nd
> end
>
> class Boogy < Dance
> ef bar
> uts (foo.class)
> nd
> 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
> uts (foo.class)
>
> So let's say I'm in the middle of a debugging session trying to debug the bar method.
>
> I see this thing called "foo" and I want to know what it is.
>
> So I
> uts (foo.class)
>
> 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) and 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/

In This Thread