Проблема установки динамического имени хеша с помощью Eval в Ruby - PullRequest
0 голосов
/ 04 июня 2019

У меня есть эта строка кода, чтобы установить ключ хеша для пары координат xy и установить его значение для экземпляра класса:

gates[eval("gate#{inputx}_#{inputy}")] = Gate.new(in1, in2)

Однако при запуске я получаю неопределенную ошибку переменной. Если я установлю inputx и inputy на 3 и 4 соответственно, я получу это:

undefined local variable or method `gate3_4' for main:Object (NameError)

Что вызывает это?

1 Ответ

1 голос
/ 04 июня 2019

Я думаю, что использование eval здесь излишне, то, что вы, вероятно, хотите, это подстановка строк:

gates["gate#{inputx}_#{inputy}"] = Gate.new(in1, in2)

Использование eval("gate#{inputx}_#{inputy}") сначала подставляет строку, затем выполняет eval в указанной строке: eval("gate3_4"), поэтому он жалуется, что переменная отсутствует, потому что вы выполняете это предложение рубина gate3_4.

...