我需要一個類似於Array#select
的函數,但是不僅傳遞數據項的塊,而且傳遞元素的索引(類似於Enumerable#each_with_index
)。我嘗試這樣做:Ruby:組合枚舉器,製作一個新的枚舉器
class Array
def select_with_index
self.each_with_index.select {|*args| yield(*args)}.map(&:first)
end
end
這似乎確實工作:如預期在
["a", "a"]
['a','b','a','a','c'].select_with_index {|letter,index| letter == 'a' && index > 1 }
結果。然而,我不喜歡我的解決方案是,那個有提供一個塊。 Ruby內核中的類似方法可以在沒有塊的情況下調用並生成Enumerator
。我怎樣才能做到這一點?我知道我可以使用block_given?
來測試塊的存在,但我該如何繼續?我需要Fiber
嗎?
順便說一句,代碼應該與Ruby 1.9.3兼容。和2.x.
它很難在元編程, G。 in kinda'public_send selector_name,&λ'。 – mudasobwa
那麼,給這個名字吧:http://pastie.org/10786273 –