2015-10-07 5 views
0

У меня есть этот код в IRB:изменение значения Enumerator в Рубине

2.2.1 :001 > a = 0 
=> 0 
2.2.1 :002 > b = (a..a+6).step(3) 
=> #<Enumerator: 0..6:step(3)> 
2.2.1 :004 > puts b.inspect 
#<Enumerator: 0..6:step(3)> 
=> nil 
2.2.1 :005 > a = 1 
=> 1 
2.2.1 :007 > puts b.inspect 
#<Enumerator: 0..6:step(3)> 
=> nil 

То, что я хочу добиться того, чтобы изменить значение a с каждой итерации, но a остается с тем же значением, что еще хуже, Ruby просто меняет значение a на 0. Есть ли способ объявить динамические перечисления ?, те, которые меняют значения каждый раз, когда меняют значения моих переменных? Спасибо.

+0

Вы хотите, чтобы вы меняли каждый раз, когда меняются изменения? – davidrac

+0

Точно! это возможно? – otrebla

+1

Вы можете сделать что-то вроде этого '@a = 0; def b (x = @ a); (X..x + 6) .step (3); end' – Santhosh

ответ

1

Когда вы пишете b = (a..a+6).step(3), выражение оценивается примерно так: b = (0..6).step(3). Изменение a после этой строки, не изменится b. Если вы хотите изменить b, вам нужно как-то переназначить его, самый простой способ - после того, как вы изменили a - 1 повторить задание b = (a..a+6).step(3)

+0

Спасибо, давидрак, я прибегаю к функции, подобной той, на которую указал Сантош. – otrebla