【发布时间】:2020-06-28 07:07:54
【问题描述】:
我有以下代码示例来检查数组中的某些元素是否匹配给定的正则表达式:
["SELECT column1, column2 FROM table1, table2 WHERE column2='value';",
"SELECT * FROM Customers WHERE Last_Name='Smith';",
"SELECT * FROM Friends"].none? { |sql| /WHERE/i.match?(sql) }
# false
如您所见,我使用match? 只是为了查看接收者和方法参数是否匹配。正如文档中所述,我对使用 match 的优点不感兴趣:
返回真或假表示正则表达式是否匹配不更新$~等相关变量。如果第二个参数存在,它指定字符串中开始搜索的位置。
所以,我可以轻松地使用===:
["SELECT column1, column2 FROM table1, table2 WHERE column2='value';",
"SELECT * FROM Customers WHERE Last_Name='Smith';",
"SELECT * FROM Friends"].none? { |sql| /WHERE/ === sql }
# false
返回的结果是一样的。也许对这种事情使用大小写相等并不常见,但这允许我将正则表达式作为无传递?参数,并避免打开块,因为我使用的是 Ruby 2.5+:
array.none?(/WHERE/) # false
并且工作方式几乎相同(对于每个可枚举的谓词方法也一样):
array.any? { |sql| /WHERE/i.match?(sql) } # true
array.any? { |sql| /WHERE/ === sql } # true
array.any?(/WHERE/) # true
所以,我的问题是;考虑到这些情况使用=== 来检查数组中的每个字符串实例是否与给定的正则表达式匹配,对我来说会不会一样?如果是这样,我可以将它们全部替换为仅将正则表达式作为方法 (none?, any?) 参数传递。
【问题讨论】:
-
提示:
;分隔符仅用于交互式 SQL shell,而不用于 Ruby 代码。
标签: ruby