2011-12-13 3 views

Répondre

3
class Hash 
    def multi_all? &block 
    all? do |key, value| 
     if value.is_a?(Hash) 
     value.multi_all?(&block) 
     elsif block == nil 
     value 
     else 
     block[key, value] 
     end 
    end 
    end 
end 
+0

Merci, mais essayez ceci:' p h2.multi_all? {| k, v | v> 0} '. Il soulève une exception de méthode non définie. – maprihoda

+0

Est-ce que cela dit une exception de méthode non définie pour NilClass? C'est parce que vous avez une valeur nulle dans h2 qui n'a pas de méthode. – robbrit

+0

désolé, il dit 'méthode non définie'> 'pour nil: NilClass (NoMethodError) ' – maprihoda

2
class Hash 
    def values_r # recursive values 
    self.values.map do |x| 
     x.is_a?(Hash) ? x.values_r : x 
    end 
    end 
end 

h1.values_r.flatten.all? 

PS: savez-vous que la méthode all? accepte également un bloc?

+0

Ou comme ça? 'Classe Hash def r_all? self.values.map do | x | x.is_a? (Hachage)? x.r_all? : x end.all? fin end' – maprihoda

+0

votre variante ignore '& block' –

+0

my n'ignore pas:' h1.values_r.flatten.all? {| X | x.to_i> 0} 'fonctionne –

Questions connexes