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"