ruby - Método de detección de rubí
detect (4)
Seleccionar tiene sentido ¿Pero puede alguien explicarme. ¿Detectarme? No entiendo estos datos.
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,6) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,7) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(2,7) }
=> 2
>> [1,2,3,4,5,6,7].detect { |x| x.between?(1,7) }
=> 1
>> [1,2,3,4,5,6,7].detect { |x| x.between?(6,7) }
=> 6
>> [1,2,3,4,5,6,7].select { |x| x.between?(6,7) }
=> [6, 7]
>> [1,2,3,4,5,6,7].select { |x| x.between?(1,7) }
=> [1, 2, 3, 4, 5, 6, 7]
Detectar devuelve el primer elemento de la lista para el que el bloque devuelve VERDADERO. Tu primer ejemplo:
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) }
=> 3
Devuelve 3
porque es el primer elemento de la lista que devuelve VERDADERO para la expresión x.between?(3,4)
.
detect
detiene la iteración después de que la condición devuelve verdadero por primera vez. select
repetirá hasta que se llegue al final de la lista de entrada y se devuelvan todos los elementos en los que el bloque devolvió verdadero.
Los ruby-docs son un gran recurso cuando quieres aprender sobre los métodos.
detect simplemente devuelve el primer valor que satisface el predicado, si lo hubiera, de lo contrario, nil. select
devuelve todos los valores que satisfacen el predicado. a.detect { p }
es análogo a a.select { p }[0]
irb(main):001:0> [1,2,3].detect { true }
=> 1
irb(main):002:0> [1,2,3].detect { false }
=> nil
irb(main):003:0> [1,2,3].detect { |x| x % 2 == 0 }
=> 2
find & detect siempre devolverá un solo objeto o devolverá nil si no coincide nada.
por ejemplo, [1,2,3,4,5,6,7] .detect {| x | x.between? (1,7)} => 1
find_all y select devolverán una serie de cosas que encuentre que coincidan.
por ejemplo, [1,2,3,4,5,6,7] .select {| x | x.between? (1,7)} => [1, 2, 3, 4, 5, 6, 7]