gpt4 book ai didi

ruby - Hash in Hash 给出错误的值作为返回?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:42 29 4
gpt4 key购买 nike

我正在尝试使用以下键存储二维哈希:

  • 维度 1 = 数字但不连续
  • 维度 2 = 字符串(如 :id 和 :value)

当元素未初始化时会出现问题。

memory = Hash.new(Hash.new(""))
memory[0][:value] = "station1"
memory[1][:value] # => "station1"

当我访问 memory[1][:value] 时,我得到了 memory[0][:value] 的值。这怎么可能?我以为我会得到一个空字符串。

最佳答案

事情是这样的:在第一行中,您创建了一个 Hash 对象,其默认值为 Hash 对象,该 Hash 对象的默认值为空字符串。当您访问一个不存在的键时,将返回该对象:

irb(main):004:0> memory = Hash.new(Hash.new(""))
=> {}
irb(main):007:0> memory[0].object_id
=> 70350452886020
irb(main):008:0> memory[1].object_id
=> 70350452886020
irb(main):005:0> memory[0][:value]
=> ""
irb(main):006:0> memory[0][:value].object_id
=> 70137307419240
irb(main):007:0> memory[1][:value].object_id
=> 70137307419240

当访问不存在的内层哈希值时,会返回默认的哈希对象。因此,通过使用尚未存在的键 0 定义 memory[0][:value] = "station1",您可以为键 :value 设置值 station1 到内部哈希。当您现在访问外部散列上的另一个不存在的键时,内部散列将再次返回,其中键 :value 已经设置为 "station1":

irb(main):008:0> memory[0][:value] = 'station1'
=> "station1"
irb(main):011:0> memory[0][:value]
=> "station1"
irb(main):012:0> memory[1][:value]
=> "station1"
irb(main):007:0> memory[0].object_id
=> 70350452886020
irb(main):008:0> memory[1].object_id
=> 70350452886020
irb(main):009:0> memory[0][:value].object_id
=> 70137307342120
irb(main):010:0> memory[1][:value].object_id
=> 70137307342120

基本上,您通过访问外部哈希上不存在的键来更改内部哈希,这会返回对内部哈希的引用。

关于ruby - Hash in Hash 给出错误的值作为返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158964/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com