Comment créer un bloc réutilisable / proc / lambda dans Ruby?

Je veux créer un filtre et pouvoir l’appliquer à un tableau ou à un hachage. Par exemple:

def isodd(i) i % 2 == 1 end 

Le je veux pouvoir l’utiliser comme ça:

 x = [1,2,3,4] puts x.select(isodd) x.delete_if(isodd) puts x 

Cela semble être simple, mais je ne peux pas comprendre ce dont j’ai besoin pour le faire fonctionner.

Créez un lambda puis convertissez-le en un bloc avec l’opérateur & :

 isodd = lambda { |i| i % 2 == 1 } [1,2,3,4].select(&isodd) 
 puts x.select(&method(:isodd)) 

Vous pouvez créer un Proc nommé et le transmettre aux méthodes qui prennent des blocs:

 isodd = Proc.new { |i| i % 2 == 1 } x = [1,2,3,4] x.select(&isodd) # returns [1,3] 

L’opérateur & convertit entre un Proc / lambda et un bloc, ce qui correspond aux méthodes comme select .