2011-12-13 1 views

ответ

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

Спасибо, но попробуйте это:' p h2.multi_all? {| k, v | v> 0} '. Он вызывает неопределенное исключение метода – maprihoda

+0

Говорит ли это неопределенное исключение метода для NilClass? Это потому, что у вас есть значение nil в h2, у которого нет метода>. – robbrit

+0

Извините, он говорит 'undefined method'> 'для 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: вы знаете, что all? метод также принимает блок?

+0

Или как это? 'class Hash def r_all? self.values.map do | x | x.is_a? (Хеш)? x.r_all? : x end.all? конец конец ' – maprihoda

+0

ваш вариант игнорирует' & block' –

+0

my не игнорирует: 'h1.values_r.flatten.all? {| X | x.to_i> 0} 'works –

Смежные вопросы