Come riscrivere questa linea utilizzando un iteratore?Semplifica più is_a? chiama l'oggetto
actor.inspect if actor.is_a? Array || actor.is_a? Hash
Il mio tentativo che doesnt lavoro:
actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
Come riscrivere questa linea utilizzando un iteratore?Semplifica più is_a? chiama l'oggetto
actor.inspect if actor.is_a? Array || actor.is_a? Hash
Il mio tentativo che doesnt lavoro:
actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
Se si desidera far corrispondere le classi esatte (e non discendenti), è possibile utilizzare:
[Hash, Array].member? a.class
penso che si dovrebbe spiegare che cosa esattamente è necessario raggiungere. Forse l'unica cosa che devi controllare è se il tuo oggetto è un Enumerable
o no, o anche se è un metodo particolare, lo respond_to?
.
Siete alla ricerca di Array#any?
actor.inspect if [Array, Hash].any? { |c| actor.is_a? c }
#each
solito solo restituisce l'enumerabile. #any?
insieme al risultato dei blocchi.
+1 Avrei +2 se potessi per il consiglio di ducktyping aggiuntivo. – rampion
Controlla che 'a.class == Hash' o' Array', ma fallirà per le sottoclassi di loro ... +1 per 'is_a? (Enumerable)' invece ... –