2014-10-01 18 views
2

塊本地變量是爲了防止塊篡改範圍以外的變量。是否存在塊本地變量只是爲了增強可讀性?

使用塊局部變量

x = 10 
3.times do |y; x| 
    x = y 
end 
x # => 10 

但是這是很容易通過聲明一個普通塊參數的做法。爲該參數創建一個新的本地作用域,該作用域優先於先前的變量/作用域。

,不使用塊局部變量

x = 10 
3.times do |y, x| 
    x = y 
end 
x # => 10 

變量x外塊不會在任何情況下得到改變。除了增強可讀性之外,是否還需要塊本地變量?

回答

1

塊參數是一個實參,而塊本地變量不是。

如果你給yield兩個參數是這樣的:

def foo 
    yield("hello", "world") 
end 

調用

x = 10 
foo do |y; x| 
    puts x 
end 

xnil在函數內部,因爲只有第一個參數被分配到y,第二個參數被丟棄。

調用

x = 10 
foo do |y, x| 
    puts x 
end 
#=>world 

x正確地獲取參數作爲"world"

相關問題