¿Cómo reescribir esta línea usando un iterador?Simplificar múltiples is_a? llama al objeto
actor.inspect if actor.is_a? Array || actor.is_a? Hash
Mi intento que dosen't trabajo:
actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
¿Cómo reescribir esta línea usando un iterador?Simplificar múltiples is_a? llama al objeto
actor.inspect if actor.is_a? Array || actor.is_a? Hash
Mi intento que dosen't trabajo:
actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
Si desea hacer coincidir las clases exactas (y no descendientes), puede utilizar:
[Hash, Array].member? a.class
creo que usted debe explicar qué es exactamente lo que necesita para alcanzar. Quizás lo único que necesite verificar es si su objeto es Enumerable
o no, o incluso si es respond_to?
algún método en particular.
Usted está buscando Array#any?
actor.inspect if [Array, Hash].any? { |c| actor.is_a? c }
#each
por lo general sólo devuelve el enumerable. #any?
ors juntos el resultado de los bloques.
+1 Me gustaría +2 si pudiera obtener consejos adicionales sobre el pato. – rampion
Esto comprueba que 'a.class == Hash' o' Array', pero fallará para las subclases de ellos ... +1 para 'is_a? (Enumerable)' en su lugar ... –