【问题标题】:How to change the value of a variable which is a value in a hash (using the hash)?如何更改作为散列值的变量的值(使用散列)?
【发布时间】:2019-06-07 19:19:01
【问题描述】:

我有一个哈希表,用于将变量存储为值。我希望能够通过在哈希中查找这些变量来更改这些变量,但是我想不出一种方法可以在不更改值本身的情况下做到这一点。

bar = "ruby"
foo = {key: bar}
foo
#=> { "key" => "ruby" }

foo[:key] = "rails"
foo
#=> { "key" => "rails" }

如何更改作为值存储在散列中的变量,而不是更改散列本身?

【问题讨论】:

  • 变量不是对象,因此它们不能存储为值。当你写{ key: bar }时,其中bar是一个变量,此时键:key的值被设置为等于bat的值。比如bar = 'hi'; h = { key: bar } #=> { key: 'hi' }h[:key]bar的值不再有任何关系。

标签: ruby hashtable


【解决方案1】:

我想知道您为什么要这样做,但您可以存储变量的名称而不是变量本身:

bar = "ruby"
foo = {key: 'bar'}

设置变量:

eval("#{foo[:key]} = 'rails'")
p foo # {:key=>"bar"}
p bar # "rails"

获取变量:

eval(foo[:key])

【讨论】:

  • 我正在替换一个巨大的 case 语句,该语句用同样的查找方法重新分配变量。 3 行而不是 ~50。非常感谢,伙计。
  • 那么以上解决了您的用例吗?很高兴我能帮上忙
  • 确实如此,兄弟。
  • solidstatejake,是的,这行得通,但它被一根丑陋的棍子打死了。在任何情况下,您都不应该在实际代码中这样做。 (我没有责怪马蒂厄,我相信他会同意。这只是你为实现目标而必须做的事情,)我建议你在@987654321 提交一个提出你真正问题的问题(关于巨大的案例陈述) @。它的任务是建议如何改进工作代码。 (因此,相比之下,它会处理损坏的代码和算法问题。)你会在 CR 上得到一些很好的答案。
猜你喜欢
  • 2019-12-02
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2014-09-05
  • 2014-05-19
  • 2018-01-02
  • 2011-08-15
相关资源
最近更新 更多