为什么 Array 不重写 Ruby 中的三等号方法?

2023-11-25

我刚刚注意到数组不会覆盖三重等号方法===,有时称为大小写相等法。

x = 2

case x
  when [1, 2, 3] then "match"
  else "no match"
end # => "no match"

而范围运算符的作用是:

x = 2

case x
  when 1..3 then "match"
  else "no match"
end # => "match"

但是,您可以对数组进行解决方法:

x = 2

case x
  when *[1, 2, 3] then "match"
  else "no match"
end # => "match"

知道为什么会这样吗?

是不是因为更有可能x是一个实际的数组而不是一个范围,并且数组覆盖===是否意味着普通的平等不会匹配?

# This is ok, because x being 1..3 is a very unlikely event
# But if this behavior occurred with arrays, chaos would ensue?
x = 1..3

case x
  when 1..3 then "match"
  else "no match"
end # => "no match"

因为它是在规范中.

it "treats a literal array as its own when argument, rather than a list of arguments"

规格加入2009 年 2 月 3 日查尔斯·纳特 (@headius)。既然这个答案可能不是你想要的,你为什么不问他呢?

在黑暗中进行一次疯狂且完全不知情的尝试,在我看来,您可能已经通过使用找到了答案a splat在你的问题中。既然该功能是按设计可用的,为什么重复这样做会消除测试数组相等性的能力呢?作为Jordan上面指出,存在这种有用的情况。


未来的读者应该注意,除非所讨论的数组已经实例化,否则根本不需要使用数组来匹配多个表达式:

x = 2

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

为什么 Array 不重写 Ruby 中的三等号方法? 的相关文章

  • mongoid 中的嵌入文档与哈希数据类型

    我找不到任何讨论此问题的博客文章或文档 它们 嵌入式文档和哈希数据类型 非常相似 彼此相比有何好处或限制 考虑我的架构设计 class HistoryTracker include Mongoid Document include Mong
  • 如何告诉 Ruby 不要序列化属性或如何正确重载 marshal_dump?

    我的 AR B 中有一个不可序列化的属性 o Discussion find 6 Marshal dump o TypeError no marshal dump is defined for class Proc from irb 10
  • Ruby `split':UTF-8 中的无效字节序列(ArgumentError)

    我正在尝试填充电影对象 但是在解析时u item文件我收到此错误 split UTF 8 中的无效字节序列 ArgumentError File open Data u item r do infile while line infile
  • 日期时间到 NSDate

    如何转换字符串2010 11 19T20 00 00Z进入一个NSDate object 我尝试过使用 dateFormatter setDateFormat yyyy MM ddTHH mm ssZ 但看起来我的自定义格式样式错误 PS
  • Rails 3:用户创建自定义表单?

    我正在尝试思考如何允许用户创建具有所有字段类型的自定义表单 如果有一颗宝石那就太好了 但我似乎无法在任何地方找到它 所以我有一个像这样的数据库设置 t integer form id t string name t string hint
  • 忽略 GEM,因为它的扩展尚未构建

    在我的工作和家用计算机上 我最近将 Ruby 升级到 2 3 1 使用ruby install I use chruby作为我的 Ruby 切换器 我开始在我的终端中看到这个警告 Ignoring bcrypt 3 1 11 because
  • 如果数组包含一个或多个相同值,则合并数组

    我有一个数组数组 a 1 2 3 3 4 5 6 7 8 8 9 9 10 我想合并包含一个或多个相同值的所有数组 所以 a 1 2 3 4 5 6 7 8 9 10 我正在努力寻找一种简洁的方法来解决这个问题 有任何想法吗 我相信这是正确
  • 为什么每个方法需要将其循环的值分配给变量?

    在 Rails 上工作 发现我对 Rails 的理解缺乏知识each method 不知道为什么each方法需要变量 message h2 h2 不确定为什么每个方法都需要变量 message 事实并非如此require它 你完全可以忽略它
  • postgres 数组字段上的 ActiveAdmin 过滤器

    我在 ActiveAdmin 中添加了以下过滤器 filter roles as select collection Model ROLES multiple true 但是当我选择过滤器值来搜索角色时 它给了我以下错误 PG Invali
  • Rails 5 - 在 gem 上充当 Taggable - 简单表单集合选择已定义的标签列表

    我正在尝试学习如何将 Acts as Taggable On gem 与 Rails 5 一起使用 我使用简单的表格作为表格 我认为部分问题是由于提案和 randd fields 之间的模型没有关联而产生的 我有名为 Proposal 和
  • 正则表达式:如果字符串包含空格则不匹配

    仅当字符串不包含空格时 我似乎无法找出匹配字符串的正则表达式模式 例如 this has whitespace match some pattern 应该返回nil but nowhitespace match some pattern 应
  • 在这种情况下(C#)替换开关块和枚举的正确方法是什么?

    如果有帮助的话 以下问题是在我正在构建的游戏的背景下提出的 在几个不同的地方我有以下场景 存在一个父类 在本示例中称为 Skill 并且我有许多子类实现父类中的方法 还有另一个父类 我们称之为 Vocation 这些技能需要列在职业的不同子
  • 操作方法:短路倒三元运算符在例如中实现C#?有关系吗?

    假设您使用三元运算符 空合并运算符或嵌套 if else 语句来选择对对象的赋值 现在假设在条件语句中 您要评估昂贵或易失的操作 要求将结果放入临时变量中 捕获其状态 以便可以对其进行比较 然后可能进行赋值 考虑一下 诸如 C 之类的语言如
  • 如何在 Ruby 中使用 Safari 技术预览设置 Capybara

    我无法使用 Capybara 和 Selenium 与 Safari 技术预览版 STP 建立会话 Capybara 甚至不会打开浏览器窗口 我已升级到 Ruby 2 3 0 Capybara 2 14 2 Selenium 3 4 0我从
  • Rails validates_与模型的错误消息相关

    我在模型中使用 validates linked 来使用其他模型的验证代码 问题是验证失败的消息是 is invalid 我想将模型验证失败的实际描述错误冒泡到顶部 我发现这个问题 验证与模型的错误消息关联 https stackoverf
  • i18n:特定型号的错误消息本地化

    我可以为每个验证本地化错误消息 但如何为特定模型创建错误 普通的语言环境如下所示 en mongoid errors messages taken It is already taken 但我想更改消息user model en mongo
  • 在 Rails 中,我可以通过委托方法订购查询吗?

    我在通过委托方法订购查询时遇到困难 我的任务是帮助将一个相当大的 Rails 3 应用程序升级到 Rails 4 我在索引操作中遇到了这个查询 我知道这些对象的命名是可怕且令人困惑的 measurements controller rb d
  • 检查 Float 是否等于 Ruby 中的整数值

    假设我有以下代码 x 0 8 y 1 0 最好的检查方法是什么y相当于Integer 目前我正在做 y to int y 这可行 但我觉得应该有更好的方法 You mod值为 1 并检查该值是否等于 0 if y 1 0
  • 从外部 gem 增强模型

    我在用着炼油厂CMS http refinerycms com 在我们的网站上让较少的技术人员更新内容 在 gem 内部 它们有一个 Page 类 用于映射站点上的每个顶级页面 我想在这个 Page 类上使用acts as taggable
  • ruby 包含问题

    class Foo def initialize a puts Hello a end end module Bar def initialize b puts b World end end class Sample lt Foo inc

随机推荐

  • System.InvalidOperationException:无法解析 gRPC 通道 URI“http://0”

    Using NET5 Azure功能 in 视觉工作室 2019 我从 Program cs 收到以下异常 System InvalidOperationException gRPC 通道 URI http 0 可能 不被解析 My Pro
  • 如何在 IntelliJ IDEA 中创建 .jar 文件或导出 JAR(如 Eclipse Java 存档导出)? [复制]

    这个问题在这里已经有答案了 我使用的是 IntelliJ IDEA IDE 我想从 Java 编译的类文件创建一个 JAR 文件 但我没有找到命令或文件 如何创建 JAR 文件 就像在 Eclipse 中完成的那样 对于 Intellij
  • 在乳胶中存储文本字符串,然后向其中添加其他文本(连接)

    我首先定义一个命令来存储字符串 Hello newcommand textstring Hello 我想附加字符串 world 但不幸的是此代码会导致错误 renewcommand textstring textstring world 您
  • 在 React - Router 4 中查看/下载 Pdf 文件

    我的项目中的一个文件夹中有一组 pdf 文件 我需要做的就是创建这些 PDF 文件的链接并在浏览器中查看它们或下载它们 我使用 React Router 4 和 React 16 以及 create react app 引导工具 无论我如何
  • 如何从 NSString 中删除引号?

    我正在尝试删除以下内容中的引号 Hello 这样字符串就是 Hello 查看苹果的文档 http developer apple com library mac documentation Cocoa Reference Foundatio
  • JavaFX 和装有 Windows XP 的旧 PC

    我想知道使用 JavaFX 2 1 制作的 gui 独立应用程序是否可以在装有 Windows XP 的相当旧的计算机上运行 因为该应用程序旨在在该计算机上运行 我问这个问题是因为我是 JavaFX 的初学者 而且该技术似乎有很高的要求 上
  • 如何使用 Google Drive Android API 删除 Google Drive 上的文件

    我是 Google Drive Android API 的新手 我正在学习它 但我遇到了一个问题 我无法使用 Google Drive Android API 删除文件 没有相关示例 有人可以帮我解答这个问题吗 多谢 更新 2015 年 4
  • 在linux中通过C++(或python)访问多个键盘输入

    我想在我自己的应用程序中读取连接到计算机的 最多 4 个 键盘的输入 我的情况 对于一个小型活动 我想将三个 USB 条形码扫描仪连接到笔记本电脑 有键盘 默认情况下 条形码扫描仪的工作原理就像键盘一样 如果它扫描条形码 则只需输入数字并按
  • 适用于 iOS 的 OpenCV 2.4.3+ 和 libstdc++?

    我试图将最新版本的 OpenCV 包含到现有的 iOS 项目中 但出现链接器错误 因为我的 XCode 项目设置为使用 libstdc 而不是 libc C 11 支持 我见过其他几个人通过启用 libc 修复了错误 例子 将 Xcode
  • 如何使用ios的blob存储服务?

    在我的应用程序中 我需要使用 Windows Azure 服务来存储我正在使用的数据 http www windowsazure com en us develop mobile tutorials get started with dat
  • 向 Woocommerce 管理订单页面添加新块

    我想在 Woocommerce 管理订单页面中创建自定义表格块 正如您在屏幕截图中看到的 我使用了 add action woocommerce admin order data after order details vp admin o
  • 哪两个分隔符可用于 URL 锚点?

    我在 URL 中使用锚点 允许人们在 Web 应用程序中为 活动页面 添加书签 我使用锚点是因为它们很容易适合 GWT 历史机制 我现有的实现将导航和数据信息编码到锚点中 并用 字符分隔 IE 创建像 location location k
  • 找不到框架“Microsoft.WindowsDesktop.App”,版本“5.0.0”

    您好 我使用 Net 5 0 创建一个 WPF 应用程序 它在我的开发系统中运行良好 但是当我尝试将 bin 文件夹复制并运行到我的 Windows 7 系统时 出现以下错误 找不到框架 Microsoft WindowsDesktop A
  • 解析包含数组的字符串

    我想将包含递归字符串数组的字符串转换为深度为 1 的数组 Example StringToArray a b c d e f g h i a b c d e f g h i 看起来很简单 但是 我来自函数背景 我不太熟悉 NET Frame
  • 从php中的图像读取地理标签数据

    有谁知道是否有办法从 PHP 中的照片读取地理标签数据 Thanks 就像其他人所说的那样 exif read data 会做的 要继续获取所有数据 请使用以下参数 exif read data img 0 true where img i
  • 验证返回码:20(无法获取本地颁发者证书)

    我有一个类似的问题 生产环境中的 Apple 推送通知 无法获取本地颁发者证书但在我的本地计算机上 我按照这个教程进行操作 http www raywenderlich com 3443 apple push notification se
  • 如何在 swift 中将字典分配给 AnyObject

    我一直在玩 Swift 我在类型方面遇到了多个错误 尤其是在使用 Swift 和我的旧 Objective C 类时 这个方法的问题是 我期待一个由 Objective C 中的 NSDictionarys 组成的数组 var curArr
  • Android 应用程序在本地或在线存储大数据?

    第一次发帖 第一次在 Android 上工作 所以如果我违反了任何规则 请放轻松 不管怎样 我刚刚开始制作一个 Android 应用程序 我正在尝试创建一个简单的问答游戏 我计划提出很多问题 希望大约 5000 多个问题 没有进行任何数据操
  • STL C++ 中的尾后迭代器是什么?

    任何人都可以解释我的意思是什么past the end 为什么我们打电话end 函数结束后 功能begin and end 定义一个半开范围 begin end 意思是 该范围包括第一个元素但不包括最后一个元素 因此 这个名字就结束了 半开
  • 为什么 Array 不重写 Ruby 中的三等号方法?

    我刚刚注意到数组不会覆盖三重等号方法 有时称为大小写相等法 x 2 case x when 1 2 3 then match else no match end gt no match 而范围运算符的作用是 x 2 case x when