2010-11-02 15 views

risposta

10

Il tuo codice chiede la verità della seguente dichiarazione: "Per tutti gli elementi a nell'elenco vuoto, a include il carattere '_'." Perché non ci sono elementi nella lista vuota, l'affermazione è vera. (Questo è indicato come vacuous truth nella logica.) Potrebbe essere più facile capire se si cerca invece di trovare un modo per rendere quell'espressione falsa. Ciò richiederebbe avere almeno un elemento nell'elenco vuoto che non ha contiene '_'. Tuttavia, la lista vuota è vuota, quindi nessun elemento di questo tipo può esistere. Pertanto, l'affermazione non può essere significativamente falsa, quindi deve essere vera.

+1

L'unico interlocutore, che non interpreta il ruolo di Capitan Ovvio. – Nakilon

7

all? passerà ogni elemento della matrice al blocco {|a| a.include?('_')}, e restituire true se il blocco non restituisce false o nil per qualsiasi degli elementi. Poiché l'array non ha elementi, il blocco non restituirà mai false o nil e quindi all? restituisce true.

2

all? restituisce true se il blocco non restituisce mai false o nil. Il blocco non viene mai chiamato, pertanto non restituisce mai false o nil e pertanto all? restituisce true.

1

Anche

[].all?{ false } 

rendimenti true, per le ragioni spiegate in risposta di BCAT.

Problemi correlati