我不知道任何Ruby,現在正在閱讀一些文檔。 我剛剛閱讀了關於使用代碼塊並且「yield」關鍵字的一個疑問,那就是是否可以將多個代碼塊傳遞給一個函數,並且可以在被調用的函數中同時使用這兩個代碼塊。如何將更多的代碼塊傳遞給Ruby中的函數?
6
A
回答
9
一次只能傳遞一個塊,但塊實際上是Proc
實例,並且您可以傳遞許多希望作爲參數的實例。
def mymethod(proc1, proc2, &block)
proc1.call
yield if block_given?
proc2.call
end
mymethod(Proc.new {}, Proc.new {}) do
# ...
end
然而,它很少有意義。
1
在句法上,使用yield
語句只支持一個傳遞給該函數的代碼塊。當然,您可以傳遞多個其他函數或「代碼塊對象」(Proc
對象)的函數,並使用它們,但不能簡單地使用yield
。
1
您可以創建Proc
對象並傳遞儘可能多的數據。
我推薦閱讀this page來理解Ruby所有不同的塊和閉包構造的細微之處。
1
可以使用call
方法,而不是產量,以處理傳入了兩個獨立的模塊
方法如下:。
def mood(state, happy, sad)
if (state== :happy)
happy.call
else
sad.call
end
end
mood(:happy, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
mood(:sad, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
您可以通過ARGS與例如:
happy.call('very much')
參數的工作方式與您預期的一樣:
Proc.new {|amount| puts "yay #{amount} !"}
相關問題
- 1. 將代碼塊傳遞給函數/函數指針JavaScript
- 2. 如何將多個塊傳遞給ruby中的方法?
- 3. 如何將多圖傳遞給函數
- 4. 如何將javascript函數的值傳遞給C#代碼?
- 5. 如何將參數傳遞給傳遞給mapPartitions的函數?
- 6. 在Ruby中傳遞多個代碼塊作爲參數
- 7. 如何在Ruby中將塊傳遞給另一個塊?
- 8. 如何將多個參數傳遞給Prototype中的onSuccess函數?
- 9. 如何將java函數指針傳遞給C++本機代碼
- 10. 將變量傳遞給c#代碼中的javascript函數
- 11. 如何將代碼後面的值傳遞給WP7中的javascript函數
- 12. 將多行代碼傳遞給wsadmin.sh?
- 13. 如何將傳遞給main(在argv中)的參數傳遞給我的函數?
- 14. 如何在下面的代碼中將參數傳遞給super?
- 15. 如何將參數傳遞給NativeActivity代碼序列中的CodeActivity
- 16. 如何將一個Vec傳遞給Rust中的多個函數?
- 17. 如何將多個變量傳遞給C中的函數?
- 18. 如何將jQuery傳遞給eval'd代碼?
- 19. 如何將此代碼傳遞給codeigniter
- 20. 將參數傳遞給代碼後面的函數onclick
- 21. 將javascript函數的參數傳遞給java代碼
- 22. 將傳遞給方法的塊傳遞給Ruby中的另一個方法
- 23. 如何在ruby/rails中將多個參數傳遞給Proc?
- 24. Ruby - 函數括號內的傳遞塊
- 25. 如何更新塊元素的樣式並將參數傳遞給PHP函數
- 26. 將函數的變量傳遞給控制器中其他函數的代碼?
- 27. 將參數傳遞給Ruby中包含的模塊?
- 28. 如何將值傳遞給代碼點火器中的模型函數
- 29. 將更多參數傳遞給這種類型的python函數
- 30. 如何將相同的數字傳遞給多個函數
塊不完全是過程。他們有共同的使用情況和語法,但他們有足夠的實現差異導致混淆行爲。這有點迂腐,但範圍的差異已經讓我陷入了困境。 – fengb 2009-11-25 14:25:49
@fengb我剛做了一個測試。 http://gist.github.com/242746您是否有更多關於Proc和block之間差異的文檔? Ruby告訴我一個塊是Proc。 – 2009-11-25 14:31:51
通過使用&var語法,塊被隱式地「typecasted」處理。但是,某些操作在作爲塊與proc使用時表現出不同的行爲。 冗長而全面的比較: http://innig.net/software/ruby/closures-in-ruby.rb – fengb 2009-11-25 15:00:11