Следующий код:
nameofclass = gets.chomp
nameofclass = Class.new
Интерпретируется машиной как:
Call the function "gets.chomp"
Assign the output of this call to a new variable, named "nameofclass"
Call the function "Class.new"
Assign the output of this call to the variable "nameofclass"
Как вы можете видеть, если вы последуете вышесказанному, есть одна переменная, которой присваивается дважды. Когда происходит второе присваивание, первое теряется.
Предположительно, вы пытаетесь создать новый класс и назвать его так же, как результат gets.chomp
. Для этого вы можете использовать eval:
nameofclass = gets.chomp
code = "#{nameofclass} = Class.new"
eval code
Есть и другие способы, это Ruby, но eval
, вероятно, самый простой для понимания.
Мне нравится ответ troelskn за его довольно частое объяснение происходящего.
Чтобы избежать использования очень опасного eval
, попробуйте следующее:
Object.const_set nameofclass, Class.new