假設一個正則表達式Rubyish方式來自調用代碼,當前上下文的外面,然後到當前項目之外實施的另一調用傳遞:反轉正則表達式
["1", "2"].grep(/1/) #=> ["1"]
有一個簡單的,Rubyish的方式來實現以下行爲時正在進行調用?
["1", "2"].grep(/1/.negate) #=> ["2"]
這種行爲類似於與!~
操作者切換=~
運算符。當然可以使用#select
或#reject
,或者打開或子類Regexp
。但是我很好奇Ruby中是否有一種方法可以用上面的方式否定正則表達式返回的匹配。另外,我不關心是否false
或nil
或true
或者匹配的位置是否涉及完成此效果。
有一個theoretical question這是相關的,但超出了這裏的簡單考慮。
編輯:我得到的迭代器是Ruby中去過濾列表的一般方式,但人們可以俯瞰問題的制約。另外,我認爲正則表達式被顛倒的方式有很好的功能。我不認爲它是過度或過於聰明的一半;它是古老的面向對象編程和Ruby擅長的事情。
雖然沒有語義明顯,如果你想想看,通過正則表達式來'split'「匹配」的所有那些非子-火柴。我不太熟悉Ruby,因此我無法寫出基於此的答案,但我相信別人可以。 –
你的問題有點矛盾,因爲當你可以簡單地修改迭代器時,試圖用這種方式修改正則表達式不是Rubyish。我會說你想要達到什麼比Rubyish更尊貴。 – sawa
@sawa - 原則上我不反對。但Ruby允許多種方式解決問題。在這種情況下,我想繼續使用不受控制的方法(不一定是'#grep'),例如,它可能不接受塊參數。 –