Не удалось найти предыдущее сообщение, которое отвечает на мой вопрос ... Я изучаю использование деструктивных и неразрушающих методов в Ruby. Я нашел ответ на упражнение, над которым я работаю (деструктивное добавление числа в хэш-значения), но я хочу четко сказать, почему некоторые более ранние мои решения не работали. Вот ответ, который работает:Ruby Hash destructive vs. неразрушающий метод
def modify_a_hash(the_hash, number_to_add_to_each_value)
the_hash.each { |k, v| the_hash[k] = v + number_to_add_to_each_value}
end
Эти два решения возвращаются в неразрушающий (так как все они используют «каждый» Я не могу понять, почему, чтобы сделать что-то разрушительное является это знак равенства выше, что делает трюк. ?):
def modify_a_hash(the_hash, number_to_add_to_each_value)
the_hash.each_value { |v| v + number_to_add_to_each_value}
end
def modify_a_hash(the_hash, number_to_add_to_each_value)
the_hash.each { |k, v| v + number_to_add_to_each_value}
end
В ваших последних двух методов ряд вычисляется, но затем просто отбрасываются, для каждого элемента '' the_hash.values' и the_hash' соответственно. Оба метода возвращают 'the_hash', который не изменяется. Вам нужно записать значения, которые вы вычисляете, в новый хеш. @tadman показывает один путь; другой (для # 2) равен 'h = {}; the_hash.each {| k, v | h [k] = v + num_to_add}; h' или, больше Ruby-like, 'the_hash.each_with_object ({}) {| (k, v), h | h [k] = v + num_to_add} '. –