2015-04-02 35 views
0

不知道如何更好地陳述這個問題的道歉。在Ruby中:我在調用它時以某種方式給出了一個方法,但不知道在哪裏。我認爲它與塊綁定有關?

我注意到{}的塊語法如何立即綁定到對象的左側,然後注意到do/end綁定到啓動該行的對象。在這個過程中,我注意到了這一點:

def a(*) 
    puts "a: #{block_given?}" 
end 

def b 
    puts "b: #{block_given?}" 
end 

a b {} 
#=> b: true 
#=> a: false 
a b do end 
#=> b: false 
#=> a: true 

的令人困惑的事情是我不需要的(*)操作方法上的「B」(或任何有參數)和兩個方法調用線導致相同錯誤。

我只是不確定發生了什麼事,如果我沒有方法'a'中的(*)參數,那麼它說「錯誤的參數數量0爲0」,但是什麼是我的論點,我通過呢?爲什麼只給予'一個'?

回答

2
a b {}  # a(b{}) 
a b do end # (a(b)) do end 

a(b do end) # behaves like a b {} 

解析器將{緊緊地綁定到它之前的標記。如果你省略了方法參數的括號,一個花括號塊將與最後一個參數關聯 - 可能是不需要的。

相關問題