这是我的杂烩:

tempData = {"a" => 100, "here" => 200, "c" => "hello"}

我需要通过如下方法访问哈希键:

tempData.a #100
tempData.here # 200

推荐答案

你可以把你的杂烩包成OpenStruct:

require 'ostruct'
tempData = {"a" => 100, "here" => 200, "c" => "hello"}
os = OpenStruct.new tempData
os.a #=> 100
os.here #=> 200

如果你真的想,你也可以给Hash级打补丁,但我建议你不要这么做:

class Hash
  def method_missing(m, *args, &blk)
    fetch(m) { fetch(m.to_s) { super } }
  end
end

tempData = {"a" => 100, "here" => 200, "c" => "hello"}
tempData.a #=> 100

Update:在我的personal extensions library中,我添加了Hash#to_ostruct方法.这将递归地将哈希转换为包含所有嵌套哈希的OpenStruct.

Ruby相关问答推荐

运行跳过的RSpec测试,如果通过则失败

VS Code Prettier 打破哈希访问

Ruby 和用正则表达式分割字符串

如何关闭 Rails 3.1 上的自动样式表/javascript 生成?

在一组字符串中找到最长的公共起始子字符串

如何在 Ruby 中初始化 Hash 中的数组

对具有相同键的 2 个哈希属性求和

如何声明 RSpec 中示例之间共享的变量?

我如何需要特定版本的 ruby​​ gem?

Rake 与 Thor 的自动化脚本?

RSpec:每次指定对具有不同参数的方法的多次调用

如何仅从 Gemfile 中查看依赖关系树?

如何在 ruby​​ net/http 中实现 cookie 支持?

Ruby 被空格分割

`respond_to?` 与 `respond_to_missing?`

如何在 Ruby 中获取命名空间中的所有类名?

在命名包含多个单词的Ruby 时,是否应该使用破折号或下划线?

Ruby:define_method 与 def

使用哈希值呈现 ERB 模板

Ruby中的字符串和符号有什么区别?