Назначение хеша внутри каждого не работает

Это:

(0..8).each do |n|
  "a_#{n}" = {}
end

выдает мне ошибку "синтаксическая ошибка, неожиданная '=', ожидая keyword_end". Я хотел создать a_0 = {}, a_1 = {}, a_2 = {} и т.п.

3 ответа

Я думаю, что вы хотите массив хешей.

a = []
(0..8).each do |n|
  a[n] = {}
end

Результат:

a #=> [{}, {}, {}, {}, {}, {}, {}, {}, {}]

a[0] #=> {}
a[1] #=> {}
...etc...

хотя в зависимости от того, что вам нужно делать дальше, этот тип инициализации может не потребоваться.

binding.instance_eval do (0..8).each do |i|
  local_variable_set("a_#{i}", {})
  ...
end end

Без плохой магии вы не получите нужную вам функциональность (есть способы сделать это, но они плохие и хакерские). Вместо этого используйте хеш или массив.

Другие вопросы по тегам