No entiendo el argumento :&
para el método de inyección en este ejemplo:
[1, 2].map do |id| my_custom_method(MyModel.find(id)) end).inject(:&).map(&:category).uniq.compact.sort
:+
tiene sentido para mí:
[1, 2, 3].inject(:+)
es lo mismo que:
[1, 2, 3].inject { |sum, number| sum + number }
¿Qué significa :&
, como en el ejemplo anterior?
Si especifica un símbolo en su lugar, cada elemento de la colección se pasará al método nombrado de memo
Entonces &
es solo el método Integer#&
Y bit a bit; cada bit en el resultado es 1 si ambos bits correspondientes en uno mismo y en otro son 1, 0 de lo contrario
[7, 5].inject(:&) # => 5
es lo mismo que
7 & 5 # => 5
y como funciona
7.to_s(2) # => "111" 5.to_s(2) # => "101"
7: 1 1 1 & & & 5: 1 0 1 -------- 5: 1 0 1