From: Im still Date: 2009-08-20T12:08:10+09:00 Subject: Re: Class name as a variable --00c09f88d0109b351a04718a0f2f Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 2009/8/20 spox > 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 ! --00c09f88d0109b351a04718a0f2f--