2014-01-16 115 views
0

關閉我有一個Vagrantfile在這個片段:通VAR值的紅寶石

for j in 1..3 
    config.vm.define "zookeeper#{j}" do |s| 
     puts j 
    end 
    puts "#{j}" 
    end 

我的目標是根據j在每次迭代的值來設置IP,但在流浪創建虛擬機,值始終爲3(的迭代最後一個值)

此打印如下:

1 
2 
3 
3 <-- should start with 1 
3 
3 

如何使用值每次迭代,而不是終值j

+0

您想要像123123一樣運行for循環多少次......等等? –

+0

nope,只有3次迭代 –

+0

可能在代碼裏面的某個地方,你正在重置它'j'到3 ... –

回答

0

問題與this question,基本上是:

一個for循環都有自己的執行上下文,它開始作爲當前執行上下文的副本 ,但它沒有得到自己的一套 局部變量綁定

我已經改變了用於爲每個,而現在它的工作原理:

(1..3).each do |j| 
    config.vm.define "zookeeper#{j}" do |s| 
     puts j 
    end 
    end 
+0

這就是爲什麼沒有人使用它們。 –

+0

嗯,這是我第一次接觸Ruby,我很驚訝人們似乎沒有使用'for',並且它有這種毛病 –

+0

這不是一個小故障。它與Ruby中的其他控制結構一致。只有腳本體,方法體,類體,模塊體,lambda文字體和塊體創建一個新的詞法範圍。 'for'循環,while循環,'until'循環,'if'表達式,''除非'表達式,'begin'塊,'case'表達式不。 –