2012-05-07 9 views
1

Я уже написал класс в рубине, назову его Foo. Теперь я хочу создать некоторый экземпляр этого. Однако я хочу использовать значение, хранящееся в переменной, как имя экземпляра.Могу ли я создать экземпляр класса с использованием назначенного имени?

Например, значение переменной bar - «ABC». Теперь я хочу сделать имя нового экземпляра «ABC» в качестве заявления ABC = Foo.new

Могу ли я это понять? Если это возможно, скажите, пожалуйста. Благодаря!!!

ответ

2

В Ruby вы также не должны бояться использовать eval(), если вы подаете только данные, сконструированные вами, программистом, без опасного внешнего воздействия. В этом случае,

cocos = "ABC" 
class_sym = :Foo 
eval "#{cocos} = #{class_sym}.new" 

Eval имеет плохую репутацию на многих языках, но в Ruby, его вполне комфортно и в основном так же быстро, как статический код.

+0

Большое спасибо. Это действительно помогает. – fabregaszy

+0

Я знаю, что это так. #eval - это молот, особенно перед тем, как вы изучите более слабые и, следовательно, более безопасные способы, например, в этом случае self.class.const_set (: ABC, self.class.const_get (: Foo) .new) :))) –

1

как local переменная, нет, но вы можете использовать instance_variable_set и друзей, чтобы назвать созданные объекты в качестве переменных экземпляра.

1

Вы также можете использовать const_set, если вы действительно работаете с константами:

constant = 'ABC' 
Object.const_set constant.to_sym, Foo.new 
Смежные вопросы