ruby - 在 ruby 中替换 === (大小写相等运算符)
问题描述
我在做自己的 ruby 枚举时遇到了 rubocop 问题。我使用了 a===
并且 rubocop 要求我更改它。但是每次我尝试放置不同的东西时,我的方法都会停止按预期工作。
module Enumerable
def my_all?(arg = nil)
return true if !block_given? && include?(nil) == false && include?(false) == false && arg.nil?
return false unless block_given? || arg.nil? == false || empty?
if block_given?
my_each do |x|
return false unless yield(x)
end
elsif arg.class == Regexp
my_each do |x|
return false unless x.match(arg)
end
elsif arg.class == Numeric
my_each do |x|
return false unless x.is_a? arg
end
else
my_each do |x|
return false unless arg === x
end
end
true
end
end
最后===
一点是提供改变的阻力。感谢那些能够理解这一点并提供帮助的人!
解决方案
文档Enumerable#all?
专门说,当给出模式时:
[...]该方法返回是否
pattern === element
为每个集合成员。
因此,为了复制您实际必须调用的方法===
。仅仅为了取悦 Rubocop 而尝试替换它可能会导致不同的行为。
在你的情况下,我会使用内联评论禁用警察:
my_each do |x|
return false unless arg === x # rubocop:disable Style/CaseEquality
end
推荐阅读
- windows-10 - 是否有手动方式回滚 Windows 10 上的更新?
- sql - 多条记录的 SQL 更新
- javascript - 如何在 5 秒后停止此画布动画绘制新粒子并在单击时从零粒子重新启动?
- java - Java以像素为单位分割字符串
- python - gitignore 在 python 环境中不起作用
- python - 如何使用scrapy抓取两个不同的域?
- angular - 第一次加载页面时调用 ngOnDestroy
- google-apps-script - 使用脚本编辑器从 Google 表格中的按钮发送电子邮件
- vue-multiselect - 带有标签选项的 vue-multiselect 单选
- javascript - 这个 redux reducer 可以吗