Re: Class name as a variable



[Note: parts of this message were removed to make it a legal post.]

2009/8/20 spox <spox@xxxxxxxxxxx>

On Wednesday 19 August 2009 12:07:06 pm Im still wrote:
Hi all

I'm thinking about a question, that is : Several classes will have a
method
in a same name (probably do same thing too).
then in a program I want the method calling class name coming from a
variable( or maybe a result of a expr).

for example:

class A
def abc end
end

class B
def abc end
end

#what i want to do is something like

a = a_variable.abc # a_variable = A | B

Now I'm doing this by

a = eval(" #{a_variable}.abc ")

My question is, is there any better (or nicer) way to doing this?

Thanks :)

With how you asked your question, I'm assuming you want to call a static
method. Otherwise, what's the point of the eval. So, is something like this
what you are after:

class A
def A.abc
"fu"
end
end
class B
def B.abc
"bar"
end
end

With this, there are a couple ways to do this. One, have your variable hold
the constant:

var = A
var.abc -> "fu"
var = B
var.abc -> "bar"

If the variable holds the class name as a string, or symbol, you can fetch
the
constant:

var = 'A'
Kernel.const_get(var).abc -> "fu"
var = :B
Kernel.const_get(var).abc -> "bar"


==============

Hi Spox
Ye, they should be static methods, else it will be wrong. My mistake :DThanks
very much, what you told is exactly what I want !

.



Relevant Pages

  • Re: Class name as a variable
    ... def abc end ... var = B ... If the variable holds the class name as a string, or symbol, you can fetch the ...
    (comp.lang.ruby)
  • Override static derived variable
    ... I want to define an algorithm on a static function inside an abstract class. ... Console.WriteLine("my var is " + var); ... How can obtain the expected results using static methods and static variables and without creating the static method A or B? ...
    (microsoft.public.dotnet.languages.csharp)

Loading