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

  免費注冊 查看新帖 |

Chinaunix

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

rspec測試 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-03-05 20:13 |只看該作者 |倒序瀏覽
本帖最后由 feiyang10086 于 2012-03-06 11:47 編輯

ruby block的用途和理解







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

常用到的場合:
1. scope 當需要動態(tài)參數(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) }
復制代碼
2. rspec測試
Ruby代碼
  1. lambda{post :create, :user => @attr}.should_not change(User, :count)  

  2. lambda{post :create, :user => @attr}.should_not change(User, :count)
復制代碼
參考文獻,很多推薦
http://www.robertsosinski.com/20 ... -procs-and-lambdas/
block本質是匿名方法,和hash loop class recursion一樣就是一個編程的工具,沒有的話程序都可以寫,就是特別的場合,有特別適用的地方。
那么,block匿名方法什么時候適用呢?方便理解也舉個例子吧,
有兩組數(shù)據(jù),可能要進行不同處理

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})
復制代碼
說不用lambda行不行,當然,最基本可以在cross_loop里面調用一個函數(shù)。只不過重用的時候不好,因為沒有process的參數(shù)。
當然,也可以不用lambda又動態(tài)傳入process,寫個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'
復制代碼
)

論壇徽章:
0
2 [報告]
發(fā)表于 2012-03-05 20:44 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP