def method1(&proc)
proc.call(1,2,3)
end
method1{ |x,y,z,a| puts a}
不會引發任何錯誤和輸出nil
。爲什麼proc不關心參數的數量?
爲什麼它不檢查的參數?它背後的邏輯是什麼?
def method1(&proc)
proc.call(1,2,3)
end
method1{ |x,y,z,a| puts a}
不會引發任何錯誤和輸出nil
。爲什麼proc不關心參數的數量?
爲什麼它不檢查的參數?它背後的邏輯是什麼?
Proc
我們做不關心驗證的論點,但拉姆達的做正確的數...
def method1(&proc)
proc.call(1,2,3)
end
method1 { |x,y,z,a| puts a}
method1 lambda { |x,y,z,a| puts a }
結果:
lambda.rb:1:in `method1': wrong number of arguments (given 1, expected 0) (ArgumentError)
from lambda.rb:6:in `<main>'
對於使用lambda或 - >()創建的procs,如果將錯誤數量的參數傳遞給Proc,則會生成錯誤有多個參數。對於使用Proc.new或Kernel.proc創建的procs,額外的參數將被默默丟棄。
proc通過這個實現了什麼?一些性能改進? – InQusitive
這是一個很好的問題,但我不知道答案... – Anthony
@InQusitive:我沒有用過這個功能我自己,但它也可能是一些使用的元編程模式。 – Dmitri
[proc'的Ruby文檔](https://ruby-doc.org/core-2.2.0/Proc.html)說:「由proc生成的Proc對象忽略額外的參數...它爲缺少的論點提供了零。「這就是你的情況。 – rlandster