无法在Ruby中更改/替换全局哈希的值



我正在编写一个简单的文本游戏来学习ruby。散列必须是一个全局变量,因为我必须在其他函数中访问它(可能有其他解决方案,但我可以找到这个)。我正在尝试更改哈希元素的值。下面的函数基本上将当前价格提高了10%,并且以其当前形式正确地更改了值并将其输出,但未能将其写入原始哈希。

$stocks = {"DOHOL" => 10, "GOZDE" => 5, "KONYA" => 20}
def margin
  puts "New values:n "
  $stocks.each do|key, value|
    percent = (value.to_i / 10) + 1
    change = rand(percent)
    value += change
    puts "#{key}: #{value} USD"
  end
end

我当然希望我能随机降价/提价10%,但这是另一个挑战,我想自己解决,所以请不要对此发表评论。更重要的是,我还有一个关于哈希的问题。是否有义务使用键和值,因为在谷歌教程中,我看到人们使用"name,value"或"person,name"等配对,而不是"key,value",而没有定义任何内容。

首先,我会尝试丢失全局变量,因为它们通常比它们的价值更痛苦。基本上是因为调试过程变得非常痛苦,尤其是当你在几个地方更改它的值时,这里有一些好的替代方案。

除此之外,我认为您想做的是为Hash中的值分配一个不同的值。您可以通过以下方式实现:

    def margin(hash)
      hash.each do |stock, value|
        hash[stock] = random_stock_increase(value)
      end
    end
    def random_stock_increase(value)
      increase = rand((value.to_i / 10) + 1)
      value + increase
    end

希望这能有所帮助。

散列中的each方法将在块中为您提供两项工作。这取决于你如何命名这些东西,以及你如何定义它们之间的名称。

新值必须在块结束前显式存储在哈希中:

$stocks[key] = value

在回答第二个问题时,您可以使用任何您想要的作为"key"one_answers"value"。这些是每个循环范围内的局部变量。然而,无论您提供什么标签,都将在迭代时对应哈希的"键"one_answers"值"。您可能应该选择对循环有意义的名称。

stocks = {"DOHOL" => 10, "GOZDE" => 5, "KONYA" => 20}
stocks.each do |name, price|
  stocks[name] = price * 2
end

完全等同于

stocks = {"DOHOL" => 10, "GOZDE" => 5, "KONYA" => 20}
stocks.each do |pirate, ninja|
  stocks[pirate] = ninja * 2
end

但第一种肯定更容易理解。

您可以随意调用迭代器中的键和值。但这可能是对哈希中的密钥和值的误解。这就是为什么很少使用其他名称来表示键和值(即使我从未见过这个)。

相关内容

  • 没有找到相关文章

最新更新