加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby:为什么我在这里得到“正则表达式字面值”的警告?

发布时间:2020-12-17 03:17:58 所属栏目:百科 来源:网络整理
导读:一个简单的 Ruby程序,运行良好(使用 Ruby 2.0.0): #!/usr/bin/rubywhile gets print if /foo/../bar/end 但是,Ruby还会输出警告警告:regex literal in condition.看来Ruby认为我的触发器表达式/foo/../bar/是危险的. 我的问题:这个计划的危险在哪里?并且
一个简单的 Ruby程序,运行良好(使用 Ruby 2.0.0):

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

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

我的问题:这个计划的危险在哪里?并且:我可以关闭此警告(理想情况下仅针对此声明,保持其他警告处于活动状态)吗?

顺便说一句,我在网上发现了几种关于这种代码的讨论,也提到了警告,但从来没有找到一个很好的解释为什么我们得到警告.

解决方法

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

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

Regexp#~与$_匹配.

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读