在Ruby中,下面的表達式: x.filter {|n| n.even?}
也可以寫爲: x.filter(&:even?)
所以,我想知道我怎麼會寫這樣的表達? x.filter {|n| !n.even?}
而不使用odd?
方法Ruby:取消散列傳遞給proc?
3
A
回答
3
如薩姆和engineerskmnky在下面討論的評論說,這是不可能直接執行x.filter { |n| !n.even? }
操作(並且事實上該塊內的兩個操作)。
我想這只是一個簡單的例子,而不是一個真實的代碼,所以如果你有沒有相反的方法,你不想創建一個,你可以在下面創建一個lambda或proc方法:
not_even = -> (n) { !n.even? }
然後調用它的過濾器:
x.filter(¬_even)
您還可以使用reject
方法,它應該給你同樣的結果,而無需使用拉姆達的魔力。
+0
沒錯。很多像'filter'這樣的Ruby方法都有它們的否定對象,例如'reject'。 – tadman
+0
謝謝。拒絕聽起來像是一個很好的選擇 –
相關問題
- 1. Ruby:將`&proc`和`proc`傳遞給方法之間的區別
- 2. 如何將散列傳遞給Ruby 1.8.7的class_eval'ed方法?
- 3. Ruby On Rails:如何將JavaScript變量傳遞給params散列?
- 4. 將散列傳遞給應用程序
- 5. 如何將散列傳遞給子?
- 6. 如何將變量傳遞給動態更新的Ruby proc?
- 7. 如何在ruby/rails中將多個參數傳遞給Proc?
- 8. Ruby中傳遞一個方法PROC
- 9. 接受任一散列或散列的陣列作爲參數傳遞給一個Ruby方法
- 10. SAS:自動將變量從proc reg傳遞給proc score
- 11. 參數傳遞給Ruby中
- 12. 將值傳遞給Ruby類
- 13. 如何將列表傳遞給TCL中的proc?
- 14. 爲什麼值傳遞給可選散列`nil`中的方法? (Ruby)
- 15. 將Ruby的線程散列/上下文傳遞給另一個線程
- 16. Ruby on Rails 4 - 表單助手未將params散列傳遞給控制器
- 17. Ruby on Rails - 如何將散列參數傳遞給部分視圖?
- 18. Rails number_field_tag傳遞散列值
- 19. ,讀取存儲PROC不傳遞值
- 20. 爲什麼我不能將一個塊傳遞給Ruby中的proc?
- 21. 將JSON消息傳遞給適當的Ruby
- 22. 將密鑰是對象的散列傳遞給JSON?
- 23. 通過選項散列將值傳遞給as_json?
- 24. 將散列和變量傳遞給子例程
- 25. 如何將散列傳遞給子例程?
- 26. 廚師 - 將屬性散列傳遞給資源
- 27. 如何使用check_box_tag將它傳遞給Rails中的params散列?
- 28. 如何將數組散列的值傳遞給子例程?
- 29. 將散列數組傳遞給哈希哈希值
- 30. 如何將散列傳遞給Perl子例程?
proc本質上被稱爲to_proc對象。你的否定是在對象上的,所以除非你把它作爲一個proc來存儲,否則你不能稱它。雖然如果這是實際的代碼,那爲什麼不用x.filter(&:odd?)? – Sam
'even?'是一個在給定對象上調用的方法,它是'Symbol#to_proc'的工作方式,因爲'!'(不)被繞過返回值到'BasicObject#!'。所以你不能用這種方式寫。你可以添加一個'not_even?'方法,但這隻意味着'奇怪',那麼爲什麼不使用'odd?'。如果'x'是可枚舉的(包括'Enumerable'),那麼你可以做'_,not_even = x.partition(&:even?)',但我不認爲這就是你想要的。 – engineersmnky
只是想指出,你總是有'過濾器'''選擇''拒絕'對應。看看[這個答案](http://stackoverflow.com/a/23711606/2981429),它顯示了一些符號到程序的hackery。但是,如果其他人將閱讀代碼,可能最好避免這些技巧。 –