gpt4 book ai didi

Ruby:为什么我在这里收到警告 "regex literal in condition"?

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:57 27 4
gpt4 key购买 nike

一个简单的 Ruby 程序,运行良好(使用 Ruby 2.0.0):

#!/usr/bin/ruby
while gets
print if /foo/../bar/
end

但是,Ruby 还会输出警告 warning: regex literal in condition。似乎 Ruby 认为我的触发器表达式/foo/../bar/是危险的。

我的问题:这个程序的危险在哪里?并且:我可以关闭此警告吗(最好只针对此语句,保持其他警告处于事件状态)?

顺便说一句,我在网上找到了一些关于这种代码的讨论,也提到了警告,但一直没有找到一个很好的解释为什么我们会被警告。

最佳答案

您可以通过使用显式匹配来避免警告:

while gets
print if ~/foo/..~/bar/
end

Regexp#~$_ 匹配。

我不知道为什么会显示警告(老实说,我什至不知道 Ruby 会隐式地将正则表达式文字与 $_ 匹配),但是根据parser's source code ,它会显示,除非您在调用 Ruby 时提供 -e 选项,即将脚本作为参数传递:

$ ruby -e "while gets; print if /foo/../bar/ end"

我会避免使用 $_ 作为隐式参数,而是使用类似的东西:

while line = gets
print line if line=~/foo/..line=~/bar/
end

关于Ruby:为什么我在这里收到警告 "regex literal in condition"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29164490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com