2010-11-02 13 views

Respuesta

10

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.

+1

El único que responde, que no interpreta el papel del Capitán Obvio. – Nakilon

7

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.

2

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.

1

Incluso

[].all?{ false } 

vuelve true, por las razones expuestas en la respuesta de bcat.

Cuestiones relacionadas