Jak przepisać tę linię za pomocą iteratora?Uprość wiele elementów is_a? wzywa obiekt
actor.inspect if actor.is_a? Array || actor.is_a? Hash
Moja próba że nie robi praca:
actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
Jak przepisać tę linię za pomocą iteratora?Uprość wiele elementów is_a? wzywa obiekt
actor.inspect if actor.is_a? Array || actor.is_a? Hash
Moja próba że nie robi praca:
actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
Jeśli chcesz dopasować dokładnie klasy (a nie potomkowie), można użyć:
[Hash, Array].member? a.class
myślę, że należy wyjaśnić, co dokładnie chcesz osiągnąć. Być może jedyną rzeczą, którą musisz sprawdzić, to czy Twój obiekt jest Enumerable
czy nie, lub nawet jeśli jest to pewna konkretna metoda.
Szukacie Array#any?
actor.inspect if [Array, Hash].any? { |c| actor.is_a? c }
#each
zwykle po prostu zwraca przeliczalny. #any?
lub razem wynik bloków.
+1 Chciałbym +2, gdybym mógł za dodatkową poradę dla ducktyping. – rampion
Sprawdza to, że 'a.class == Hash' lub' Array', ale nie powiedzie się dla ich podklas ... +1 dla 'is_a? (Enumerable)' zamiast ... –