PourquoiPourquoi [] .all? {| A | a.include? ('_')} return true?
[].all?{|a| a.include?('_')}
retour true
?
PourquoiPourquoi [] .all? {| A | a.include? ('_')} return true?
[].all?{|a| a.include?('_')}
retour true
?
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.
Le seul répondeur, qui ne joue pas le rôle de Captain Obvious. – Nakilon
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
.
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.
Même
[].all?{ false }
retours true
, pour les raisons expliquées dans la réponse de BCAT.
Je vois, Merci à tous – psjscs
Isomorphe à [Pourquoi IQueryable.All() renvoie true sur une collection vide?] (Http://stackoverflow.com/questions/2195289/why-does-iqueryable-all-return- true-on-a-empty-collection) –