加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – 为什么Ruby Koans练习的about_hashes.rb中的test_defaul

发布时间:2020-12-17 04:02:43 所属栏目:百科 来源:网络整理
导读:我正在进行 ruby koans练习,并且在test_default_value_is_the_same_object方法练习中为什么答案是这样的,我有点困惑.以下是代码: def test_default_value_is_the_same_objecthash = Hash.new([])hash[:one] "uno"hash[:two] "dos"assert_equal ["uno","dos"
我正在进行 ruby koans练习,并且在test_default_value_is_the_same_object方法练习中为什么答案是这样的,我有点困惑.以下是代码:

def test_default_value_is_the_same_object
hash = Hash.new([])

hash[:one] << "uno"
hash[:two] << "dos"

assert_equal ["uno","dos"],hash[:one]
assert_equal ["uno",hash[:two]
assert_equal ["uno",hash[:three]
end

我不确定为什么无论键是什么,值总是“uno”和“dos”?我想当密钥是1时,返回的值应该是“uno”;当key为“two”时,返回的值应为“dos”.为什么不管键是什么,值总是一个数组?

谢谢,我期待着你的回答!

解决方法

hash = Hash.new([])

将使用[](让我们称之为Harvey)实例化一个新数组,然后使用Harvey作为默认值进行哈希.

hash[:one]

不存在,所以你得到哈维. Harvey使用Array#<<<<<<<<<<<运算符(相当于harvey.push(“one”))

hash[:two]

也不存在,所以你再次得到哈维(谁记得,已经包含“uno”).他现在也得到了“dos”.

hash[:three]

哈维还是带着他的“uno”和“dos”.

如果您希望代码的行为与您认为的那样,每个键中的数组不同,则每次需要默认时都需要返回一个新数组,而不是每次都返回Harvey:

hash = Hash.new { |h,k| h[k] = [] }

如果您只想让哈希与数组无关,请忽略Harvey,并使用Hash#[] =而不是Array#<<:

hash = Hash.new()

hash[:one] = "uno"
hash[:two] = "dos"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读