将 Ruby 的匹配运算符应用于
nil
的预期行为是什么?
具体来说,捕获变量应该发生什么以及为什么?
这段代码
"a1c" =~ /.*(\d).*/
puts $1
nil =~ /.*(\d).*/
puts $1
puts $1.nil?
产生这个结果:
1
1
false
我的理解是,失败的匹配会将所有捕获变量重置为
nil
。如果是这样,为什么在尝试与 $1
匹配后 nil
仍然是 1?
(我试图找到解释预期行为的文档;但是,我的 Google 技能让我失望了。)
在Ruby中< 3.2.0,
NilClass#=~
实际上是由其父类Object
在Object#=~
中实现的。这是一个回退方法,可以被 Object
的子类覆盖,例如 String
或 Regexp
。 Object#=~
方法在 Ruby 2.6.0 中被弃用,最终在 Ruby 3.2.0 中被删除。这些版本直接实现了NilClass#=~
。
基本
Object#=~
resp。 NilClass#=~
方法自己不执行匹配,只是返回 nil
而不设置/重置任何全局魔术变量。这具有该方法可用于所有对象的效果,但仅对实现重写方法的对象执行有意义的操作。
• Rails Active record 查询返回 `nil` 尽管数据实际存在于数据库中
• JWT::DecodeError(OpenSSL 3.0 不支持 nil 或空 hmac_secret):
• 存在时尝试使用 FindFirstChild 索引 nil
• 为什么 date from date 组件不为错误的组件返回 nil?
• 如何检查 go lang 中的 panic nil 异常
• 为什么 RuboCop 不忽略 Rails 中的文件“schema.rb”?
• 错误:“name_id”列无法自动转换为整数类型您可能需要指定“USING name_id::integer”
• 使用Maps API计算两个地址的距离,然后将每个距离保存到数据库
• 如何将 Ruby 0.36827e1 转换为 3.6827
• 无法将 Ruby 路径从 macOS 包更改为 Homebrew 包(使用 Intel Core i7 运行 MacOS Monterey)
• 尝试访问下一个节点时,指向结构的全局指针不会在函数调用中更新。全局指针返回 nil
• Ruby on rails 网站保留长时间运行的进程并挂起,为什么?