From: spox Date: 2009-08-20T04:26:37+09:00 Subject: Re: Class name as a variable 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"