使用空数组初始化哈希意外行为[重复]

2023-11-24

我想初始化一个Hash与一个空的Array对于每个新键,将某个值推送到该数组。

这是我尝试做的:

a = Hash.new([])
# => {} 
a[1] << "asd"
# => ["asd"]
a
# => {}

预期输出为a was {1 => ["asd"]}但那并没有发生。我在这里缺少什么?

红宝石版本:

ruby 2.0.0p598 (2014-11-13 revision 48408) [x86_64-linux]

Just do

a = Hash.new { |h, k| h[k] = [] }
a[1] << "asd"
a # => {1=>["asd"]}

阅读以下几行Hash::new文档。它确实解释了为什么你没有得到想要的结果。

新(obj)→ new_hash

如果指定了 obj,则该单个对象将用于所有默认值。

新的{|哈希值,密钥|块 } → new_hash

如果指定了一个块,它将使用哈希对象和键来调用,并且应该返回默认值。如果需要,块有责任将值存储在哈希中。

您可以手动测试:

a = Hash.new([])
a[1].object_id # => 2160424560
a[2].object_id # => 2160424560

现在有了上面的风格Hash对象创建时,您可以看到对对象的每次访问未知密钥,返回相同的default目的。现在换个方式,我的意思是挡路 :

b = Hash.new { |h, k| [] }
b[2].object_id # => 2168989980
b[1].object_id # => 2168933180

所以,随着block形式,每未知密钥访问,返回一个新的Array object.

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

使用空数组初始化哈希意外行为[重复] 的相关文章

  • 如何阻止与 RSpec 和 Capybara 的外部连接?

    在我的 Rails 项目中 我想编写非理想条件的测试 例如缺乏互联网连接或超时 例如 我正在使用 gem 来联系 API 并且希望确保在我的应用程序和外部 API 之间存在连接问题时能够正确处理错误 我已经可以通过用录像机制作固定装置并从
  • Ruby 未绑定方法:是否可以强制绑定到其他类的实例?

    我想知道我是否可以强迫这种情况发生 class A def bomb bomb end end class B end bomb A instance method bomb b B new bomb bind b 目前它抛出错误 Type
  • Ruby 中的并行赋值运算符

    我正在查看 Ruby 编程 书中的一个示例 def fib up to max i1 i2 1 1 parallel assignment i1 1 and i2 1 while i1 lt max yield i1 i1 i2 i2 i1
  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • 从 Ruby 中的 DateTime 变量获取时间

    我在 ruby 中工作 我有一个包含数据库中今天的日期时间的对象 我只想要时间截断数据 我怎样才能得到那个 Try 日期时间 strftime http www ruby doc org stdlib 1 9 3 libdoc date r
  • 预期的 ProductField,出现数组问题

    我有一个 Rails 4 应用程序 它有一个如下所示的 params 块 def store params params require store permit name description user id products attr
  • 在私有控制器方法中返回redirect_to

    前言 我正在使用设备进行身份验证 我试图阻止未经授权的用户查看 编辑或更新其他用户的信息 我最关心的是用户将 DOM 中的表单修改为另一个用户的 ID 填写表单 然后单击更新 我已经专门阅读过 像下面这样的东西应该有效 但事实并非如此 SO
  • 为什么即使我的哈希码值相同,“==”也会返回 false

    我写了一个像这样的课程 public class HashCodeImpl public int hashCode return 1 public static void main String args TODO Auto generat
  • Ruby 枚举器中的“break”与“raise StopIteration”

    如果我使用 Ruby Enumerators 来实现生成器和过滤器 generator Enumerator new do y x 0 loop do y lt lt x x 1 break if x gt CUTOFF end end l
  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • yard 0.7.3 无法在 Markdown 和 Textile 中构建我的自述文件

    我决定将我的项目中的 README 文件转换为 Markdown 并一直使用yard 验证文档是否正确呈现 所以我安装了 rdiscount 将 README 更改为 README md 并尝试 yard doc README md 这给了
  • 哈希表的空间复杂度是多少?

    具有 32 位键和指向单独存储的值的 32 位指针的哈希表的大小是多少 是 2 32 个槽 4 字节 键 4 字节 指向值的指针 4 10 9 4 4 32GB 我想了解哈希表的空间复杂度 我认为你问错了问题 数据结构的空间复杂度表示它占用
  • Rails 控制台无法运行

    rbenv 红宝石版本 2 6 6 导轨版本 5 1 4 我正在较旧的代码库中工作 ruby 2 6 6 rails 5 4 1 这是我每天使用的代码库 我必须通过 rbenv 下载一个新的 ruby 版本作为单独的存储库 这样做在我的旧代
  • rvm gem 安装错误?

    我正在摆弄 ruby gems 和 rvm 它工作得很好 但现在当我尝试安装 gem 时出现错误 gem install Rails错误 同时 执行 gem Errno EACCES 权限被拒绝 Users da rvm gems ruby
  • 已定义方法的 Ruby 钩子?

    我一直在谷歌上搜索这个问题 但找不到答案 这让我认为答案是否定的 但我想我会在这里问 以防有人确切知道 Ruby 是否有一个钩子来定义方法 即在模块或类上 如果没有 是否有人足够熟悉该实施的情况main对象以了解它到底如何将方法复制到Obj
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 在 Perl 中使用数据引用的正确方法

    我有一组想要处理的数据 为了简化我的代码 最好通过指向原始数据的引用数组来访问我的数据的某些子集 比解释更好的是 我写下了这个例子 它还没有工作 最后 我想更新原始数据 而不必更新所有子集 用 Perl 可以做这样的事情吗 usr bin
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • 为 RoR 中的每个用户创建新的 URL 路径

    如何在 Ruby on Rails 中实时创建新的 URL 路径 例如 我希望我的用户拥有 name XXX com 或 XXX com name 仅供参考 我在 Heroku 上托管代码 看看 subdomain fu 插件 https

随机推荐

  • 如何增加Docker容器默认大小?

    我们创建了默认大小为 10GB 的 docker 镜像 并且已经加载了 cassandra 数据 现在数据已满 意味着没有空间 谁能告诉我如何在不丢失现有数据的情况下将 docker 容器大小从 10GB 增加到 40GB 使用 devic
  • UniVerse学习材料[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我最近接触到了 UniVerse 的专有后代 有谁知道我在哪里可以获得好的教程或温习其更受欢迎的父级的语法怪癖 我什至不知道如何获得表格列表 导航很困难 而且我没有看到任何手册页 更
  • Drupal localhost 重定向到 www.localhost.com

    我正在开发一个 drupal 站点 我将其签出 svn 到我的本地主机 现在的问题是 当我去 http www site com 一切正常 但是当我去 http localhost 工作 站点 我被重定向到 http www localho
  • 无法使用 R 中的 sqlSave 附加到 SQL Server 表

    我正在尝试使用 R 中 RODBC 包的 sqlSave 函数更新 SQL 表 数据存在于数据框中 当我尝试运行命令时 sqlSave DBConn dat df verbose T tablename table append T 我收到
  • 如何增加 ASP.NET WebAPI Post 调用的 json 大小限制?

    我在页面上的表单有点太大了 它收集每月的测量数据 请看一下示例 Year 2013 Month 3 Records Id 0 Date 3 1 2013 RiverSection 5 UserNumber 56 Id 0 Date 3 1
  • 如何在 Swift 3 中将 __NSMallocBlock__ 转换为其基础类型?

    I had a trick帮助测试UIAlertController在 Swift 2 x 中有效 extension UIAlertController typealias AlertHandler convention block UI
  • 无法编译任何C++程序;错误:未知类型名称“uint8_t”

    编辑2 问题是不是简单的印刷错误 我在下面的日志中犯了一个拼写错误 我已更正该错误 但问题仍然存在 编辑 在尝试下面之后 我错误地使用 gcc 而不是 g 运行了一次 g 以前就存在这个问题 现在也存在 我目前使用的是 MacOS High
  • 如何从从另一个文件夹中加载的程序集中获取类型?

    我使用以下代码 Assembly LoadFile the assembly in another folder var type Type GetType the full name of the type 即使程序集已经在这行代码之前加
  • 如何使用 sed 替换源文件中的版权/许可证标头?

    我需要用 Apache License 2 0 标头替换所有 Java 源文件中的 LGPL 许可证标头 即 Copyright c 2012 Tyler Treat This file is part of Project Foo Pro
  • 直接P2P连接

    这个主题类似于这个线程 我对网络编程主题相当陌生 除了在单个本地计算机上执行基本的 TCP UDP 之外 从未做过任何其他事情 现在我正在开发一个需要 P2P 网络支持的应用程序 更具体地说 我需要应用程序通过互联网进行连接和通信 最好不使
  • 如何使用 Apache POI (Java) 在 Excel 中创建表单控件(单选、复选框、按钮等)?

    我是否可以使用 Java 通过 Apache POI 库为 Excel 生成表单控件 如果这不可能 还有什么替代方案 我真的需要这个来完成我的工作 预先感谢 对于 Excel 2007 或更高版本 由于 Apache POI 在 OpenX
  • 在后台运行 JavaExec 任务,然后在构建完成时终止

    我试图找出如何启动一个 JavaExec 任务来生成 Jetty 服务器而不阻塞后续任务 另外 我需要在构建完成后终止该服务器 知道我该怎么做吗 我知道该线程是 2011 年的 但我仍然偶然发现了这个问题 这是使用 Gradle 2 14
  • 为 SSL 配置 SSRS

    我有一个运行 SSRS 2014 的 SSRS 实例 我想将其配置为通过 SSL 使用 服务器位于http reports mydomain2 com 我从 GoDaddy 购买了域名 www mydomain com 上的多 SSL 证书
  • 使用流填充多维数组

    我是 Java 8 的新手 目前无法完全掌握 Streams 是否可以使用 Stream 函数操作来填充数组 这是我如何使用标准 for 循环执行此操作的示例代码 public static void testForLoop String
  • 这种锁定和管理锁定异常的解决方案有什么问题?

    我的目标是在应用程序中实现线程安全功能和异常处理的约定 我对线程管理 多线程的概念相对较新 我在用 NET 3 5 阅读本文后 我编写了以下辅助方法来包装所有锁定的操作http blogs msdn com b ericlippert ar
  • 获取尚未应用的类的 CSS 属性值

    在 jQuery 中 我可以使用以下方法获取选择器的 CSS 属性值css方法并传递属性名称 例如 myElement css backgroundImage 我的问题是 如何从一个类中获取 css 属性值not尚未应用于any元素 如同
  • 如何找回我的 MySQL 用户名和密码?

    我丢失了 MySQL 用户名和密码 我该如何取回它 停止 MySQL 进程 使用 skip grant tables 选项启动 MySQL 进程 使用 u root 选项启动 MySQL 控制台客户端 列出所有用户 SELECT FROM
  • 使用 System.Text.Json 将 IConfiguration 序列化回 Json

    我将一些 IConfiguration 作为 json 存储在我的 sqlserver 数据库中 这样我就可以将它们绑定到一些已经构造的类以提供动态设置 在某些时候 我可能会在运行时更改新的绑定属性 然后更新数据库 问题是 当我需要时 该类
  • 用于返回多个安全组成员的 PowerShell 脚本

    我需要使用 PowerShell 返回多个安全组的所有成员 很方便地 所有组都以相同的字母开头 我可以使用以下代码返回所有相关安全组的列表 Get ADGroup filter Name like ABC Select Object Nam
  • 使用空数组初始化哈希意外行为[重复]

    这个问题在这里已经有答案了 我想初始化一个Hash与一个空的Array对于每个新键 将某个值推送到该数组 这是我尝试做的 a Hash new gt a 1 lt lt asd gt asd a gt 预期输出为a was 1 gt asd