gpt4 book ai didi

ruby - 为什么这个 Ruby 散列不是我想象的那样?

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:20 26 4
gpt4 key购买 nike

我有这个代码:

$ze = Hash.new( Hash.new(2) )

$ze['test'] = {0=> 'a', 1=>'b', 3 => 'c'}

$ze[5][0] = 'one'
$ze[5][1] = "two"

puts $ze
puts $ze[5]

这是输出:

{"test"=>{0=>"a", 1=>"b", 3=>"c"}} 
{0=>"one", 1=>"two"}

为什么不是输出:

{"test"=>{0=>"a", 1=>"b", 3=>"c"}, 5=>{0=>"one", 1=>"two"}} 
{0=>"one", 1=>"two"}

?

最佳答案

对于 $ze[5][0] = xxx,您首先调用 $ze 的 getter [],然后调用$ze[5] 的 setter []=。参见 Hash's API .

如果 $ze 不包含键,它将返回您使用 Hash.new(2) 初始化的默认值。

$ze[5][0] = 'one'
# in detail
$ze[5] # this key does not exist,
# this will then return you default hash.
default_hash[0] = 'one'

$ze[5][1] = 'two'
# the same here
default_hash[1] = 'two'

您没有向 $ze 添加任何内容,而是向其默认哈希添加键/值对。这就是为什么你也可以这样做。您将得到与 $ze[5] 相同的结果。

puts $ze[:do_not_exist]
# => {0=>"one", 1=>"two"}

关于ruby - 为什么这个 Ruby 散列不是我想象的那样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14026906/

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