Primero de todo, he encontrado dos artículos útiles en la documentación acerca de estos métodos:

todos?: Pasa cada elemento de la colección para el bloque dado. El método devuelve true si el bloque nunca devuelve falso o nulo.

?: Pasa cada elemento de la colección para el bloque dado. El método devuelve true si el bloque siempre devuelve un valor distinto de falso o nulo.

Pero en caso de vacío arrays y hashes tengo:

irb(main):004:0> [nil, "car", "bus"].all?
=> false
irb(main):005:0> ["nil", "car", "bus"].all?
=> true
irb(main):006:0> [].all?
=> true
irb(main):007:0> ["nil", "car", "bus"].any?
=> true
irb(main):008:0> [nil, "car", "bus"].any?
=> true
irb(main):009:0> [nil].any?
=> false
irb(main):010:0> [].any?
=> false

Puede alguien explicarme por qué matrices vacías me dan false en el caso de la any? método y true en caso de all??

En términos matemáticos: any? es un pliegue de la lógica O cuyo elemento de identidad es false. Por otro lado all? es un pliegue de la lógica, Y, cuyo elemento de identidad es true. en.wikipedia.org/wiki/Identity_element

OriginalEl autor y4roslav | 2012-11-06

1 Comentario

  1. 16

    El método devuelve true si el bloque nunca devuelve falso o nulo.

    Así que desde el bloque nunca se llama, por supuesto, nunca devuelve falso o nulo, por lo tanto all devuelve true.

    Lo mismo va para any:

    El método devuelve true si el bloque siempre devuelve un valor distinto de
    falso o nulo.

    Desde el bloque nunca se llama, nunca devuelve un valor distinto de falso o nulo, por lo tanto any devuelve false.

    OriginalEl autor Kim Stebel

Dejar respuesta

Please enter your comment!
Please enter your name here