为什么将字符串铲入哈希会导致这个结果? [复制]

2023-12-10

我正在研究 Ruby Koans,以便更好地掌握 Ruby 和 TDD。我到达代码中的第 93 行about_hashes.rb这让我很困惑如何将其铲入默认构造函数而不是哈希值中。出于好奇,我尝试使用相同的字符串作为构造函数的参数,它产生了类似的结果。

现在我的问题是,为什么无论我使用什么键,都会检索到相同的对象,以及如何将新对象铲入方法中哈希中特定键的数组中 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] #why not ["uno"]?
    assert_equal ["uno", "dos"], hash[:two] #why not ["dos"]?
    assert_equal ["uno", "dos"], hash[:three] #why not []?

    assert_equal true, hash[:one].object_id == hash[:two].object_id
  end

def test_default_value_with_block
    hash = Hash.new {|hash, key| hash[key] = [] }

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

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

测试的名称暗示了其原因。

test_default_value_is_the_same_object是否可以向您展示当您提出要求时hash[:some_value_that_doesnt_exist_yet],默认情况下,你会得到你指定的默认值——这是同一个物体每次。通过修改该对象,您可以为每个不存在的键修改它。修改hash[:one]还修改hash[:two].

test_default_value_with_block显示了使用块构建哈希,该块将用于为每个键提供新值。当你这样做时,值hash[:one] and hash[:two]是不同的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么将字符串铲入哈希会导致这个结果? [复制] 的相关文章

随机推荐

  • Oracle:如果行不存在,如何插入

    在 PL SQL oracle 中 如果行不存在 插入行的最简单方法是什么 我想要类似的东西 IF NOT EXISTS SELECT FROM table WHERE name jonny THEN INSERT INTO table V
  • Firefox 上的 event.target

    var x event target event srcElement document getElementById x id style left 200 px document getElementById x id style to
  • 创建项目后更改视图引擎

    我在asp net mvc4中创建了一个项目并将其视图引擎设置为ASPX 现在 我想将 View Engine 更改为 Razor 怎么做 我不想创建一个新项目 我想使用现有项目来更改视图引擎 我们可以从属性或其他方式更改视图引擎吗 应该像
  • 处理塔防游戏 - 塔攻击敌人

    我会保持简短 我正在制作一个塔防游戏作为一个迷你项目 同时我有一些空闲时间 我正在尝试弄清楚如何实现塔 以便能够在敌人进入射程时使用 dist 射击敌人但我只是不知道如何实现使用敌人位置和塔位置的方法 我有一个 CreepSprites 和
  • 如何防止Chrome在自动填充用户名/密码时更改字体?

    我有一个包含用户名和密码输入的登录表单 在 Windows 上的 Chrome 中 在其他浏览器或 Mac 上不会发生这种情况 当将鼠标悬停在 Chrome 密码管理器中保存的用户名上时 字体会发生变化 字体的变化然后改变了输入的宽度 使我
  • dataTableOutput 顶部和底部的空“row-fluid”div

    我有一个使用 renderDataTable 创建输出的闪亮示例 我删除了所有可能的选项 分页 过滤 搜索等 但是 现在我的表输出的顶部和底部有一个空白行 以前是过滤和搜索的地方 仅当我删除了过滤和搜索选项时 如何从数据表包装器内部删除这两
  • 什么是 Mocha 平等测试?

    我正在使用 Mocha 测试 Express Node 应用程序 我想要进行以下测试 比较两个空数组 assert equal 通过 但是 Mocha 给了我以下错误 AssertionError 我应该使用哪种方法才能通过两个空数组的比较
  • ncurses 和 stdin 阻塞

    I have stdin in a select set and I want to take a string from stdin whenever the user types it and hits Enter But select
  • 是否可以“等待yield return DoSomethingAsync()”

    常规迭代器块 即 yield return 与 async 和 await 不兼容吗 这很好地说明了我正在尝试做的事情 async Task
  • Web 服务代理中的 SSL 证书问题

    我正在构建一个 JAVA Web 服务客户端 在其中连接到服务 该服务具有 ssl 证书验证 如何使用 ssl 证书验证来调用此服务 我在使用 Eclipse 构建的客户端中使用 JAX RPC 实现 举个例子将不胜感激 我能够进行网络服务
  • 如何在删除前在php中添加确认框?

    我在 PHP 中创建一个简单的列表 用户可以在其中添加姓名 年龄 电子邮件等 我还添加了一个删除选项 但我想在用户单击删除选项时添加一条确认消息 我尝试搜索 Google 但只找到了 jQuery 和 JavaScript 解决方案 有没有
  • 将一个 JSONAray 项目转换为多个项目

    我有以下字符串 它以列表的形式从数据库返回 我的假设是 该列表包含 3 个项目 但它只显示 1 作为大小 因此它将所有活动项作为一个元素返回 注意 当我尝试获取列表的第一个索引 list get 0 时 它仅返回一个 活动 而不是所有三个
  • 为什么下载 pdf 文档而不是在嵌入/iframe 中显示?

    我们有一个内部网站 其中有一些指向网络服务器上托管的 pdf 文档的链接 如果我打开 Chrome 开发工具 F12 检查链接并添加具有相同 pdf 文档的嵌入 它会下载该文件而不是显示它 我尝试过使用 embed 和 iframe 但仍然
  • 帮助使用 JCheckBox 制作 JTree

    我有一个不寻常的情况 我需要一个 JTree 每个节点包含 2 个复选框和一个标签 能够添加一个侦听器来告知何时选中任何潜在的复选框 我还需要根节点具有相同的布局 我假设这意味着创建一个带有 2 个 JCheckBox 和一个 JLabel
  • 分离类模板中的参数包

    我正在尝试编写一个使用参数包并为参数包中包含的每种类型实现成员函数的类模板 这是我到目前为止所拥有的 template
  • 使用 CAAnimation 启用用户交互?

    使用基于块的动画的选项字段制作动画时 允许用户与视图交互非常容易 但在我的程序中 我使用的是 CAKeyframeAnimation 并且没有看到任何用于设置启用用户交互的属性 有什么办法可以做到这一点吗 Thanks 编辑 这是实际的代码
  • 从哈希中提取值

    您好 我使用 HTTParty 调用远程 json 文件 我需要提取 URL 以在我的一项测试中使用 json 格式类似于 manifest header generated xxxxxxxxxxxxxxx name xxxxxxxxxxx
  • 如何在点击下拉菜单时制作CSS下拉菜单

    如何让下面的css下拉菜单只接受点击下拉 例如 现在当鼠标悬停 请选择 时 第二层出现 我想更改为当单击 请选择 时 出现第二层 另外 点击事件应该应用于第二层菜单 这是一个Fiddle 我正在使用 jquery 但不知道如何执行此操作 h
  • localhost 或 127.0.0.1 的第三方签名 SSL 证书?

    在不透露太多信息的情况下 我需要设置一个网络服务器系统 供互联网上的最终用户使用 用例是这样的 连接到系统时 最终用户 通常 在家中位于本地防火墙后面 该系统由我们托管的远程服务器组成 严格通过 https 使用 SSL 授权机制要求用户在
  • 为什么将字符串铲入哈希会导致这个结果? [复制]

    这个问题在这里已经有答案了 我正在研究 Ruby Koans 以便更好地掌握 Ruby 和 TDD 我到达代码中的第 93 行about hashes rb这让我很困惑如何将其铲入默认构造函数而不是哈希值中 出于好奇 我尝试使用相同的字符串