accessing Class from class symbol

T

treefrog

Hi,
I'm trying to work out how to access Class methods when I only have the
class symbol

class Foo
def Foo.hello
puts "Hello Foo"
end
end

class Bar
def Bar.hello
puts "Hello Bar"
end
end

str="Foo"

# I could do this, but there must be a better way.
eval "#{str}.hello"

Kernel doesn't have send, so I can't pass the class as a symbol to
Kernel, and then send the method.

Any ideas?

Cheers

Steve
 
G

George Ogata

treefrog said:
Hi,
I'm trying to work out how to access Class methods when I only have the
class symbol

class Foo
def Foo.hello
puts "Hello Foo"
end
end

class Bar
def Bar.hello
puts "Hello Bar"
end
end

str="Foo"

# I could do this, but there must be a better way.
eval "#{str}.hello"

Kernel doesn't have send, so I can't pass the class as a symbol to
Kernel, and then send the method.

Kernel does have `send', but classes aren't methods... :)

Foo and Bar in your case are constants. Since they're defined at
toplevel scope (i.e., not nested in any class or module definitions),
they're under Object. So to get the class, do:

klass = Object.const_get('Foo') # symbols also accepted

And to call a method, do:

klass.send('hello') # symbols also accepted

Hope this helps!
 

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

Forum statistics

Threads
473,778
Messages
2,569,605
Members
45,237
Latest member
AvivMNS

Latest Threads

Top