Учитывая, что у меня есть эти хэши:
h1 = {"a" => { "b" => 1, "c" => {"d" => 2, "e" => 3} } } h2 = {"a" => { "b" => 1, "c" => nil } }
И я хочу эти результаты:
h1.multi_all? # true h2.multi_all? # false
Как мне реализовать метод multi_all?
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
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? также принимает блок?
all?