if hh[r] проверит, является ли значение объектом. В руби все объект кроме nil, потому результатом выполнения этого будет тру или фолс. Например вернлось число 500 - это объект, значит будет Тру и код провалится дальше. Дальше у вас идет оператор +=, это значит, что руби опять достанет значение, но вместо проверки на тру.фолс, он значение добавит к существующей переменной balance