【发布时间】:2018-02-02 13:32:33
【问题描述】:
所以我发现了这种 ruby 行为,这让我疯狂了一个多小时。当我将哈希传递给具有哈希默认值和关键字参数的函数时,似乎引用没有正确传递。一旦我去掉默认值或关键字参数,函数就会按预期运行。我在这里遗漏了一些明显的红宝石规则吗?
def change_hash(h={}, rand: om)
h['hey'] = true
end
k = {}
change_hash(k)
k
#=> {}
只要我取出默认值或关键字 arg,它就可以正常工作。
def change_hash(h, rand: om)
h['hey'] = true
end
k = {}
change_hash(k)
k
#=> {'hey' => true}
def change_hash(h={})
h['hey'] = true
end
k = {}
change_hash(k)
k
#=> {'hey' => true}
编辑
感谢您的回答。你们中的大多数人都指出,在某些情况下,ruby 会将散列解析为关键字参数。但是,我说的是哈希具有字符串键的情况。当我传递哈希时,传递的值似乎是正确的。但是修改函数内部的hash并不会修改原来的hash。
def change_hash(hash={}, another_arg: 300)
puts "another_arg: #{another_arg}"
puts "hash: #{hash}"
hash['hey'] = 3
end
my_hash = {"o" => 3}
change_hash(my_hash)
puts my_hash
打印出来
another_arg: 300
hash: {"o"=>3}
{"o"=>3}
【问题讨论】:
标签: ruby hash parameter-passing keyword-argument