Ruby 注入(inject)初始是一个散列

标签 ruby

谁能告诉我为什么会出现以下情况:

['a', 'b'].inject({}) {|m,e| m[e] = e }

抛出错误:

IndexError: string not matched
        from (irb):11:in `[]='
        from (irb):11:in `block in irb_binding'
        from (irb):11:in `each'
        from (irb):11:in `inject'
        from (irb):11
        from C:/Ruby192/bin/irb:12:in `<main>'

而下面的工作?

a = {}
a["str"] = "str"

最佳答案

您的区 block 需要返回累积哈希:

['a', 'b'].inject({}) {|m,e| m[e] = e; m }

相反,它在第一次传递后返回字符串 'a',在下一次传递中变为 m 并且您最终调用字符串的 []= 方法。

关于Ruby 注入(inject)初始是一个散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9434162/

相关文章:

c - Nokogiri 编译错误 - 找不到库/ header

ruby - 如何处理 RMagick 在 Ruby 中的内存泄漏?

ruby - 如何将 5 位二进制字符串转换为字母字符?

ruby - Pry:whereami 命令的别名

ruby-on-rails - 使用连接表创建方法 - 拥有并属于许多

ruby CSV重复行解析

ruby-on-rails - 从另一个循环中分别调用每个文章标签

ruby - RSpec 属性散列

ruby-on-rails - 删除或覆盖由父类(super class)或混合添加的 ActiveRecord 验证

ruby - 将键值对插入哈希