如何解决匹配路口使匹配不可变
仅此而已,我正在尝试将junction与正则表达式与在raku中的m//
operator进行匹配(在该页面上搜索Explicit topic match
)
在perl6
REPL中:
> any('a','b') ~~ m/./
False
此后,无论我怎么称呼m//
,我都会遇到不匹配比赛的投诉:
> 'x' ~~ m/./
Cannot modify an immutable Match (「a」)
in block <unit> at <unkNown file> line 1
问题
这里的幕后发生了什么?
讨论
问题似乎源于$/
special variable被设置为结点的事实
any(「a」,「b」)
交界处比赛后,似乎「a」
在交界处引发了投诉。
> $/=Any
(Any)
> 'x' ~~ m/./
「x」
或
> 'x' ~~ /./
「x」
> 'x' ~~ m/./
「x」
(因此先与//
匹配,以更改$/
,然后然后与m//
匹配)。
说明
我没有试图“解决”问题以外的任何问题:我只是想了解这种行为。
出于交叉引用的目的,正如@jjmerelo所建议的,现在它也是rakudo
github issue。
解决方法
@raiph在the comment中解决了比赛应该返回False
还是True
的附带问题。
另一方面,收到immutable Match
错误was的主要问题似乎是一个错误,并且至少在我的系统上有a commit可以解决。
所以问题是(根据提交消息)正则表达式匹配对象不应该是结。
,以下可能全部是poppycock。但是我将发布我的即时反应,吃甜点,然后再探索。 :)
有效代码
say any('a','b') ~~ /./; # False
say 'x' ~~ /./; # 「x」
区别?我丢了m
。
为什么有区别?
它们的含义不同。
在这些情况下,您可能的意思是对~~
的RHS上的正则表达式与~~
的LHS上的正则表达式进行正则表达式匹配。
但是我认为您实际上写的是~~
的RHS上的子表达式,首先对$_
进行正则表达式匹配,然后对结果的em>后续匹配(只是一个智能匹配,而不是 regex匹配)与Nil
的LHS上的值的匹配对象或~~
)。
我还没有探索为什么您会得到不可变的东西,但是我认为以上是第一步。如果事实证明这是胡说八道,我将在稍后删除该答案。 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。