嵌套哈希已定义?() [重复]

2024-02-26

确定是否最简洁的方法是什么@hash[:key1][:key2]已定义,如果@hash or @hash[:key1]为零?

defined?(@hash[:key1][:key2])返回 True 如果@hash[:key1]存在(不判断是否:key2被定义为)


当使用 ActiveSupport (Rails) 或 Backports 时,您可以使用try:

@hash[:key1].try(:fetch, :key2)

你甚至可以处理@hash being nil:

@hash.try(:fetch, :key1).try(:fetch, :key2)

如果你想@hash始终返回缺失键的哈希值:

@hash = Hash.new { |h,k| h[k] = {} }
@hash[:foo] # => {}

您还可以定义此递归:

def recursive_hash
  Hash.new { |h,k| h[k] = recursive_hash }
end

@hash = recursive_hash
@hash[:foo][:bar][:blah] = 10
@hash # => {:foo => {:bar => {:blah => 10}}}

但回答你的问题:

module HasNestedKey
  Hash.send(:include, self)
  def has_nested_key?(*args)
    return false unless sub = self[args.shift]
    return true if args.empty?
    sub.respond_to?(:has_nested_key?) and sub.has_nested_key?(*args)
  end
end

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

嵌套哈希已定义?() [重复] 的相关文章

随机推荐

  • Delphi 获取 EXE 的句柄

    这是我现在正在做的一个例子 var Client String Handle Integer begin Client Window Name GetWindowThreadProcessId FindWindow nil PAnsiCha
  • 从node.js消息调用Windows API

    我是 Node 新手 我有这个简单的 Node js 服务器可以在 Windows 上运行 服务器代码 var ws require websocket server var server ws createServer server ad
  • 根据原始数据创建队列退出率表

    我需要帮助根据原始数据创建队列退出表 我有一个如下所示的数据集 DT lt data table id c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  • Chrome扩展-通过后台脚本获取Active Tab的DOM信息

    我知道有很多与这个主题相关的问题 但到目前为止 没有一个问题能让我在 V3 中解决这个问题 当我运行以下background js时 我只得到未定义的结果 我的扩展的目标 至少在这个阶段 是抓取活动选项卡的 DOM 并提取所有 div 元素
  • 如何通过https访问kubernetes服务?

    这是我的集群信息 kubectl cluster info Kubernetes master is running at https 129 146 10 66 6443 Heapster is running at https 129
  • 本地运行 web-Socket 进行调试

    我正在使用 gorilla web socket 我想在本地运行它 我的意思是使用以下 chrome 客户端 或其他推荐的工具 当我进入调试模式时出现错误 I use github com gorilla websocket var upg
  • 如何使用mysql将查询结果存储在变量中

    SET v1 SELECT COUNT FROM user rating SELECT v1 当我执行此查询时set变量显示此错误 Error Code 1064 You have an error in your SQL syntax c
  • 如何简单地扩展 docker-compose 服务并将索引和计数传递给每个服务?

    我正在寻找一种扩展 docker compose 服务的方法并看到了 scale 选项 但找不到任何方法来获取每个容器内的索引和计数 这是一个简化的撰写文件 version 2 1 services my thing restart alw
  • Java OpenCV 绑定

    我正在寻找 OpenCV java 绑定 所有引用都指向处理库 我知道处理是java 但是没有独立的java库吗 或者应该只使用处理库 我刚刚找到了这个 OpenCV 的 java 包装器 https github com bytedeco
  • Visual C++:将传统 C 和 C++ 字符串代码迁移到 Unicode 世界

    我看到 Visual Studio 2008 及更高版本现在开始使用字符集设置为 Unicode 的新解决方案 我的旧 C 代码仅处理英文 ASCII 文本 并且充满了 文字字符串如 Hello World char type char 指
  • 防止画布对象发生碰撞或交叉

    我正在画布上绘制 n 个矩形 矩形是可拖动和可缩放的 我想防止它们重叠或相交 最好的情况是 如果它们只是相互咬合 我想办法检查一下十字路口 在我的示例中 我将触摸对象的不透明度设置为 0 1 巧合的是 在我尝试解决这个问题时 我的对象在接触
  • 为什么在 cmd 中安装任何 python 模块时会收到这些错误“警告:忽略无效的分发 -yproj ”

    警告 忽略无效的分发 yproj c users space junk appdata local programs python python310 lib site packages 警告 忽略无效的分发 yproj c users s
  • 无法在 chrome google.maps api 中加载资源

    我在 chrome 控制台中出现此错误 Failed to load resource net ERR BLOCKED BY CLIENT https maps google com maps api v3 api js 22 2 intl
  • 修复 Flash 的激进缓存

    我有一个闪存应用程序 可以加载大量变化的数据偶尔 所以我设置了我的服务器来发送Last Modified标头并回复304 Not Modified当客户端的版本没有过时时 它在每个浏览器中都能正常工作 但 Flash 完全忽略这一点并积极缓
  • 在矩形的联合中找到孔?

    我在单位正方形 红色 内和周围有许多随机矩形 黑色 需要提取单位正方形内未被任何矩形覆盖的所有多边形区域 看起来这可以用 Shapely 来完成 当我得到矩形 绿色 的并集时 我已经达到了这一点 但我不知道如何从单位正方形中减去它并检索多边
  • Symfony2 路由不支持的键

    我正在学习 Symfony 2 但遇到一些问题 使用教程 我在routing yml内捆绑 acme demo homepage path hello name defaults controller AcmeDemoBundle Defa
  • 处理 Powershell 函数中的管道和参数输入

    我对 在一个月的午餐中学习 PowerShell 一书中看到的内容感到困惑 在第 21 章中 当作者讨论通过参数绑定或管道接受输入的函数时 他给出了两种模式 第一个如下 function someworkerfunction do some
  • PHP 5.4:获取实例变量的完全限定类名

    我知道有静电classPHP 5 5 上的字段 但我必须坚持使用 PHP 5 4 是否可以从变量中获取完全限定的类名 Example namespace My Awesome Namespace class Foo 以及代码中的其他地方 p
  • 尽管我已在 Xcode 5 中添加,但应用程序图标未显示

    我已经添加了如下图所示的图标 但我仍然没有在我的设备或模拟器中看到该图标 这可能是 XCode 5 的错误 即添加的图标实际上并未包含在应用程序包中 但您可以通过转到 构建阶段 展开 复制包资源 然后按底部的 号手动添加来解决此问题图标文件
  • 嵌套哈希已定义?() [重复]

    这个问题在这里已经有答案了 确定是否最简洁的方法是什么 hash key1 key2 已定义 如果 hash or hash key1 为零 defined hash key1 key2 返回 True 如果 hash key1 存在 不判