我正在使用一个小的DSL,它使用nomethod
回退来重载以捕获过载值上使用的运算符。这与overload
的文档中描述的symbolic calculator的功能类似。有没有办法在Perl中重载正则表达式绑定运算符`=〜`?
这为标准比较操作工作正常,但考虑以下因素:
my $ret = $overloaded =~ /regex/;
在这种情况下,nomethod
去调用的字符串化$overloaded
,并且超载丢失后。我想过要返回一个绑定变量,这个变量至少可以让我随身携带原来的重载对象,但在执行正则表达式时仍会丢失。
所以,最终的问题是,如果有什么办法可以延长一个象征性的计算器overload
的主意,包括正则表达式结合运营商=~
和!~
,使上面的代码示例将调用nomethod
与($overloaded, qr/regex/, 0, '=~')
或类似的东西?
我还简要介绍了重载smartmatch运算符~~
,但似乎并没有这样做(总是默认为正则表达式匹配而不是重载)。
编辑:我查看~~
更多,并发现my $ret = $overloaded ~~ q/regex/
由于smartmatching规则工作。关闭,但不是一个理想的解决方案,我希望它在5.10之前工作,所以我欢迎其他答案。
我想提供一个包装到正则表达式引擎不会工作,如果你想在5.10之前工作。 – 2010-09-14 06:34:27
结束疯狂!学习Python! – bukzor 2010-09-16 03:57:29
@bukzor:我敢肯定,你不能在Python中重载正则表达式绑定操作符,因为它没有。当然,你可以编写一个类,给你类似的,有限的功能:http://code.activestate.com/recipes/302498-re-match-and-replace-through-operator-overloading/ – 2010-09-17 02:46:45