2010-11-02 30 views

Répondre

10

Votre code demande la vérité de la déclaration suivante: "Pour tous les éléments a dans la liste vide, a inclut le caractère '_'." Parce qu'il n'y a aucun élément dans la liste vide, l'instruction est vraie. (Ceci est appelé vacuous truth dans la logique.) Il pourrait être plus facile à comprendre si vous essayez plutôt de trouver un moyen de rendre cette expression fausse. Cela nécessiterait d'avoir au moins un élément dans la liste vide qui n'a pas contient '_'. Cependant, la liste vide est vide, donc aucun de ces éléments ne peut exister. Par conséquent, la déclaration ne peut être significativement fausse, donc elle doit être vraie.

+1

Le seul répondeur, qui ne joue pas le rôle de Captain Obvious. – Nakilon

7

all? passera chaque élément du tableau au bloc {|a| a.include?('_')}, et revenir true si le bloc ne retourne pas false ou nil pour l'un des éléments. Puisque le tableau n'a aucun élément, le bloc ne renverra jamais false ou nil et all? renvoie true.

2

all? renvoie true si le bloc ne renvoie jamais false ou nil. Le bloc n'est jamais appelé, donc il ne retourne jamais false ou nil et donc all? retourne true.

1

Même

[].all?{ false } 

retours true, pour les raisons expliquées dans la réponse de BCAT.