Как преобразовать текст строки в имя класса

У меня есть строка как

classname = "Text"

используя это, я хочу создать объект класса Text

Теперь, когда я пытаюсь сделать это

classname = classname.constantize

, я получаю Text как модуль, а не как класс. Пожалуйста, предложите что-нибудь.

Спасибо и с уважением

Рохит

7
задан kiamlaluno 27 August 2010 в 13:21
поделиться

5 ответов

Вы можете использовать:

Object.const_get( class_name )

$ irb 
>> class Person 
>>     def name
>>         "Person instance"
>>     end
>> end
=> nil
>> class_name = "Person"
=> "Person"
>> Object.const_get( class_name ).new.name 
=> "Person instance"
17
ответ дан 6 December 2019 в 07:24
поделиться
classname = "Text"
Object.const_set(classname, Class.new{def hello;"Hello"; end})

t = Object.const_get(classname).new
puts t.hello # => Hello

Уловка объясняется здесь: http://blog.rubybestpractices.com/posts/gregory/anonymous_class_hacks.html где автор использует его для подкласса StandardError.

2
ответ дан 6 December 2019 в 07:24
поделиться

Попробуйте:

Kernel.const_get "Text"

Для ваших собственных определенных модулей:

MyModule.const_get "Text"   
1
ответ дан 6 December 2019 в 07:24
поделиться

Попробуйте это.

Object.const_get("String")

Во что превратится «Текст», на самом деле зависит от вашего кода. Если он возвращается с модулем, то Text — это модуль, потому что у вас не может быть и модуля, и класса с одним и тем же именем. Может быть, в другом модуле есть класс Text, на который вы хотите сослаться? Трудно сказать больше, не зная больше о вашем коде.

3
ответ дан 6 December 2019 в 07:24
поделиться

Это вернет новый объект класса classname:

eval(classname).new

1
ответ дан 6 December 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: