Object.const_set с использованием переменной - PullRequest
2 голосов
/ 27 февраля 2012

Я пытаюсь «назвать» новый класс, используя i varaible.

Из другого потока я получил некоторые сведения об использовании och 'const_set', и он отлично работает, пока я пытаюсь это сделать:

name = "Person"
attributes = [:fname, :age]

klass = Object.const_set name, Struct.new(*attributes)

p = Person.new("John Doe", 42) # => #<struct Person name="John Doe", age=42>

Но теперь я бы хотел использовать переменную name немного по-другому, например, изменить значение, которое она содержит, и т. Д. (Который на самом деле будет константой??)

Я извлекаю новое значение извне в строку с названием titleString ..

Но когда я пытаюсь передать это значение в 'name'

name = "#{titleString}"
attributes = [:fname, :age]

klass = Object.const_set name, Struct.new(*attributes)

, я получаю "неправильное имя константы "- ошибка ..

Как получилось?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Получаете ли вы titleString от входа, такого как gets? В конце titleString может висеть символ новой строки.

> name="Bar\n"
=> "Bar\n" 
> klass = Object.const_set name, Struct.new(*attributes)
  NameError: wrong constant name Bar
1 голос
/ 27 февраля 2012

Было бы проще, если бы вы напечатали значение name перед вызовом const_set.Я предполагаю, что это имя не начинается с заглавной буквы.Константа должна начинаться с заглавной буквы.

...