¿Por qué¿Por qué [] .all? {| A | a.include? ('_')} ¿devuelve true?
[].all?{|a| a.include?('_')}
retorno true
?
¿Por qué¿Por qué [] .all? {| A | a.include? ('_')} ¿devuelve true?
[].all?{|a| a.include?('_')}
retorno true
?
Su código pregunta acerca de la veracidad de la siguiente instrucción: "Para todos los elementos a
en la lista vacía, a
incluye el carácter '_'
." Debido a que no hay elementos en la lista vacía, la declaración es verdadera. (Esto se conoce como vacuous truth en lógica). Puede ser más fácil de entender si en su lugar intentas encontrar una manera de hacer que esa expresión sea falsa. Esto requeriría tener al menos un elemento en la lista vacía que no contiene '_'
. Sin embargo, la lista vacía está vacía, por lo que no puede existir ese elemento. Por lo tanto, la declaración no puede ser significativamente falsa, por lo que debe ser verdadera.
El único que responde, que no interpreta el papel del Capitán Obvio. – Nakilon
all?
pasará cada elemento de la matriz al bloque {|a| a.include?('_')}
, y volver true
si el bloque no vuelve false
o nil
para cualquiera de los elementos. Como la matriz no tiene elementos, el bloque nunca devolverá false
o nil
, por lo que all?
devuelve true
.
all?
devuelve verdadero si el bloque nunca devuelve falso o nulo. El bloque nunca se llama, por lo tanto, nunca devuelve falso o nulo y, por lo tanto, all?
devuelve verdadero.
Incluso
[].all?{ false }
vuelve true
, por las razones expuestas en la respuesta de bcat.
Veo, gracias a todos – psjscs
Isomorfo a [¿Por qué IQueryable.All() devuelve verdadero en una colección vacía?] (Http://stackoverflow.com/questions/2195289/why-does-iqueryable-all-return- true-on-an-empty-collection) –