2014-01-14 62 views
1

我不明白以下兩個代碼示例之間的區別在哪裏。第一個例子有一個塊參數和一個塊本地參數。第二個有兩個塊參數。我明白,塊和塊本地參數 - 都有自己的範圍。但是兩者有什麼區別?塊參數與紅寶石塊本地參數

x = 10 
5.times do |y; x| 
x = y 
puts "x inside the block: #{x}" 
end 

puts "x outside the block: #{x}" # <-- gives 10 

x = 10 
5.times do |y, x| 
x= y 
puts "x inside the block: #{x}" 
end 

puts "x outside the block: #{x}" # <-- gives also 10 

回答

5

實際上它是相同的。

語義但是,你的第二個例子是錯誤的:你傳遞過程只需要一個第二個參數(x)到#times,所以它是完全不必要。只是當你將額外的參數傳遞給塊時,Ruby設計並不會抱怨。

然而,你應該使用塊局部參數,當你想在該塊用於確保變量做塊的範圍,如外界不小心覆蓋或引用變量:

x = 10 
5.times do |y| 
    x = 20 
end 
puts x # => 20 

x = 10 
5.times do |y; x| 
    x = 20 
end 
puts x # => 10