【发布时间】:2018-08-26 09:19:49
【问题描述】:
我有一个函数,它接受一些参数,包括哈希和整数变量,并调整它们的值。该函数会更改要再次使用的哈希值,但整数变量会自行重置。我相信这是因为它正在更改该变量的副本,但我想知道如何完全更改它。我一直在阅读有关 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。
感谢这是一个简单的问题,但我们将不胜感激!
【问题讨论】:
-
你所问的是不可能的。 Ruby 是按值传递的,不可能在调用者的范围内更改变量的绑定。 Ruby 中没有传递引用。我怀疑这是X-Y-question,而您实际上不是在寻找传递引用。
-
将
buyProducts用作某种“购物车”对象上的方法会更惯用,然后myProducts和totalPrice将是实例变量,balance将是另一个“帐户”或“信用卡”对象中的实例变量。结果看起来更像 Ruby,让您的问题消失,并且您不会有一个带有五个位置参数的方法。
标签: ruby proc lexical-scope