在下面的代碼中,我正在閱讀閉包,但是想知道如果函數中有多個proc對象會發生什麼。所以當函數被調用時,只有最後一個lambda被調用了。我在下面測試了這個。 (interactive:http://labs.codecademy.com/BAZX#:workspace)在帶有兩個lambda的函數中,與.call一起使用時,如何評估最後一個lambda? (ruby clojures)
def n_times(thing)
lambda {|n| puts "first called"; thing * n}
lambda {|n| puts "second called"; thing - n}
end
test = n_times(2)
puts test.call(3)
第一個lambda是怎麼跳過的?
puts n_times(3).call(2) => second called 1
此外,爲什麼下列無效?編輯:刪除,愚蠢的錯誤。謝謝:)
這是很難回答這樣的問題不理解你爲什麼認爲應該調用第一個lambda表達式,或者爲什麼認爲第二個示例應該是有效的。就像你期望第二個例子所做的一樣?當你將管道放在它周圍時,你認爲這意味着什麼? – 2013-05-12 03:21:35
我測試這個的原因是因爲.call除了將參數傳遞給塊之外,並不真正帶參數。但我不知道lambda .call選擇執行什麼。我想測試它是否執行了兩個塊,所以我使用了put語句來查看第一個代碼是否至少已被執行,但事實並非如此。我不明白爲什麼。 – Senjai 2013-05-12 03:27:06