delete create array ruby map shorthand

create - ruby array find



Otra notaciĆ³n abreviada de Ruby Map (1)

Desafortunadamente, esta notación abreviada (que llama "Symbol # to_proc") no tiene una forma de pasar argumentos al método o bloque al que se llama, por lo que ni siquiera podría hacer lo siguiente:

array_of_strings.map(&:include, ''l'') #=> this would fail

PERO, está de suerte porque en realidad no necesita este atajo para hacer lo que está tratando de hacer. El signo puede convertir un Proc o Lambda en un bloque, y viceversa:

my_routine = Proc.new { |str| str.upcase } %w{ one two three }.map &my_routine #=> [''ONE'', ''TWO'', ''THREE'']

Tenga en cuenta la falta de colon antes de my_routine . Esto se debe a que no queremos convertir el símbolo :my_routine en un proceso al encontrar el método y llamar a .method en él, sino que queremos convertir el proceso my_routine en un bloque y pasarlo al map .

Sabiendo esto, incluso puedes mapear un método nativo de Ruby:

%w{ one two three }.map &method(:p)

El method método tomaría el método p y lo convertiría en un Proc, y el & convierte en un bloque que se pasa al map . Como resultado, cada artículo se imprime. Esto es el equivalente de esto:

%w{ one two three }.map { |s| p s }

Soy consciente de la taquigrafía para el mapa que se parece a:

[1, 2, 3, 4].map(&:to_s) > ["1", "2", "3", "4"]

Me dijeron que esto es taquigrafía para:

[1, 2, 3, 4].map{|i| i.to_s}

Esto tiene perfecto sentido. Mi pregunta es la siguiente: parece que debería haber una forma más fácil de escribir:

[1, 2, 3, 4].map{|x| f.call(x)}

para algún procedimiento f. Sé que la forma en que acabo de escribir no es tan larga, pero diría que tampoco es el ejemplo anterior para el que existe la taquigrafía. Este ejemplo parece ser el complemento del primer ejemplo: en lugar de llamar a i''s to_s method para cada i, deseo llamar f para cada x.

¿Existe tal taquigrafía?