Я думаю, я понимаю, что вы имеете в виду из этого одного примера (как-то). Мы проверяем, находится ли каждый ключ в субхеше в суперхеше, а затем проверяем, совпадают ли соответствующие значения этих ключей каким-либо образом: если значения являются хешами, выполните еще одну глубокую проверку, в противном случае проверьте, равны ли значения:
class Hash
def deep_include?(sub_hash)
sub_hash.keys.all? do |key|
self.has_key?(key) && if sub_hash[key].is_a?(Hash)
self[key].is_a?(Hash) && self[key].deep_include?(sub_hash[key])
else
self[key] == sub_hash[key]
end
end
end
end
Вы можете увидеть, как это работает, потому что оператор if
возвращает значение: последний оцененный оператор (я не использовал троичный условный оператор, потому что это сделало бы это намного более уродливым и трудным для чтения).