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

为什么在Ruby中捕获命名组会导致“未定义的局部变量或方法”错误

发布时间:2020-12-17 03:47:43 所属栏目:百科 来源:网络整理
导读:我在 Ruby 2.0中使用正则表达式中的命名捕获时遇到问题.我有一个字符串变量和一个插值的正则表达式: str = "hello world"re = /w+//(?greeting#{re})/ =~ strgreeting 它引发了以下异常: prova.rb:4:in main': undefined local variable or method greeti
我在 Ruby 2.0中使用正则表达式中的命名捕获时遇到问题.我有一个字符串变量和一个插值的正则表达式:

str = "hello world"
re = /w+/
/(?<greeting>#{re})/ =~ str
greeting

它引发了以下异常:

prova.rb:4:in <main>': undefined local variable or methodgreeting’ for main:Object (NameError)
shell returned 1

但是,插值表达式在没有命名捕获的情况下工作.例如:

/(#{re})/ =~ str
$1
# => "hello"

解决方法

命名捕获必须使用文字

您遇到了Ruby的正则表达式库的一些限制. Regexp#=~方法限制命名捕获如下:

>如果正则表达式不是文字,则不会发生分配.
> regexp插值#{}也会禁用赋值.
>如果正则表达式位于右侧,则不会发生分配.

您需要决定是否要在正则表达式中使用命名捕获或插值.你目前不能兼得.

(编辑:李大同)

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

    推荐文章
      热点阅读