亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3202 | 回復(fù): 1
打印 上一主題 下一主題

ruby block的用途和理解 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-03-06 10:36 |只看該作者 |倒序?yàn)g覽
ruby block的用途和理解






lambdarubyrspec
在論壇討論問題,自己寫體會(huì)抄回來

常用到的場(chǎng)合:
1. scope 當(dāng)需要?jiǎng)討B(tài)參數(shù)時(shí)
Ruby代碼
  1. scope :aged_0, lambda{ where("created_at IS NULL OR created_at < ?", Date.today + 30.days).joins(:owner) }   
  2. scope :aged_1, lambda{ |d_time|where("created_at IS NULL OR created_at < ?", d_time).joins(:owner) }  

  3. scope :aged_0, lambda{ where("created_at IS NULL OR created_at < ?", Date.today + 30.days).joins(:owner) }
  4. scope :aged_1, lambda{ |d_time|where("created_at IS NULL OR created_at < ?", d_time).joins(:owner) }
復(fù)制代碼
2. rspec測(cè)試
Ruby代碼
  1. lambda{post :create, :user => @attr}.should_not change(User, :count)  

  2. lambda{post :create, :user => @attr}.should_not change(User, :count)
復(fù)制代碼
參考文獻(xiàn),很多推薦
http://www.robertsosinski.com/20 ... -procs-and-lambdas/

http://augustl.com/blog/2008/pro ... nonymous_functions/


block本質(zhì)是匿名方法,和hash loop class recursion一樣就是一個(gè)編程的工具,沒有的話程序都可以寫,就是特別的場(chǎng)合,有特別適用的地方。
那么,block匿名方法什么時(shí)候適用呢?方便理解也舉個(gè)例子吧,
有兩組數(shù)據(jù),可能要進(jìn)行不同處理

Ruby代碼
  1. def cross_loop(array_a, array_b, process)   
  2.   array_a.each do |element_a|   
  3.     array_b.each do |element_b|   
  4.       process.call(element_a, element_b)   
  5.     end  
  6.   end  
  7. end  
  8.   
  9. cross_loop([1,2,3], [3,4,5], lambda{|x,y| puts x + y})   
  10. cross_loop([1,2,3], [3,4,5], lambda{|x,y| puts x * y})  

  11. def cross_loop(array_a, array_b, process)
  12.   array_a.each do |element_a|
  13.     array_b.each do |element_b|
  14.       process.call(element_a, element_b)
  15.     end
  16.   end
  17. end

  18. cross_loop([1,2,3], [3,4,5], lambda{|x,y| puts x + y})
  19. cross_loop([1,2,3], [3,4,5], lambda{|x,y| puts x * y})
復(fù)制代碼
說不用lambda行不行,當(dāng)然,最基本可以在cross_loop里面調(diào)用一個(gè)函數(shù)。只不過重用的時(shí)候不好,因?yàn)闆]有process的參數(shù)。
當(dāng)然,也可以不用lambda又動(dòng)態(tài)傳入process,寫個(gè)process.call然后,再寫些process函數(shù)也可以。

Ruby代碼
  1. def cross_loop(array_a, array_b, process)   
  2.   array_a.each do |element_a|   
  3.     array_b.each do |element_b|   
  4.       self.send(process, element_a, element_b)   
  5.     end  
  6.   end  
  7. end  
  8. def plus(a, b); puts a + b; end  
  9. def multiply(a, b); puts a * b; end  
  10. cross_loop([1,2,3], [3,4,5], 'plus')   
  11. cross_loop([1,2,3], [3,4,5], 'multiply')  

  12. def cross_loop(array_a, array_b, process)
  13.   array_a.each do |element_a|
  14.     array_b.each do |element_b|
  15.       self.send(process, element_a, element_b)
  16.     end
  17.   end
  18. end
  19. def plus(a, b); puts a + b; end
  20. def multiply(a, b); puts a * b; end
  21. cross_loop([1,2,3], [3,4,5], 'plus')
  22. cross_loop([1,2,3], [3,4,5], 'multiply')
復(fù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-03-12 19:55 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP