Ruby - функция изменяет хеш, но не целочисленную переменную - PullRequest
0 голосов
/ 26 августа 2018

У меня есть функция, которая принимает некоторые параметры, включая хэш и целочисленную переменную, и корректирует их значение. Функция изменяет значение хэша для повторного использования, однако целочисленная переменная сбрасывает себя. Я полагаю, что это потому, что это изменяет копию этой переменной, но я хотел знать, как я могу изменить это полностью. Я читал что-то про proc, но, к сожалению, не могу решить свою проблему.

Мой код указан ниже:

def buyProducts(product, amount, balance, foods, myProducts)
    totalPrice = foods[product] * amount
    balance -= totalPrice
    myProducts[product] = amount

    puts "You bought some #{product}\n"
    puts "Your remaining balance is $#{balance}\n"
    puts "Your current inventory is #{myProducts}"
end

Здесь myProducts - это хеш, который обновляется каждый раз. баланса, однако, нет, то есть 100 с самого начала. в то время как строка «ваш остаток» обновляется, при повторном вызове функции она сбрасывается до 100.

Я ценю, что это простой вопрос, но любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 26 августа 2018

Вот ключевое отличие: вы переназначаете [локальную переменную] balance, но не myProducts. Вместо этого вы просто меняете состояние myProducts. Вот почему эти изменения «выживают» при вызове метода: объект один и тот же, он просто содержит разное содержимое.

Это невозможно с целыми числами, потому что каждое целое число является собственным объектом и не имеет изменяемого состояния.

Ваш метод должен будет сообщить об изменениях во внешнее состояние, например, вернув новое значение balance (тогда вызывающий будет отвечать за отслеживание / применение нового значения). Или вы можете установить переменную экземпляра.

...