【发布时间】:2011-04-11 22:02:32
【问题描述】:
我正在开发一个小型 DSL,它使用 nomethod 回退进行重载,以捕获用于重载值的运算符。这类似于overload 的文档中描述的symbolic calculator 的功能。
这适用于标准比较运算符,但请考虑以下几点:
my $ret = $overloaded =~ /regex/;
在这种情况下,调用nomethod 对$overloaded 进行字符串化,然后重载丢失。我考虑过返回一个绑定变量,这至少可以让我携带原始重载对象,但在执行正则表达式期间仍然会丢失。
所以,最终的问题是,是否有任何方法可以扩展overload 的符号计算器概念,使其包含正则表达式绑定运算符=~ 和!~,以便上述代码示例调用@987654331 @ 和 ($overloaded, qr/regex/, 0, '=~') 或类似的东西?
我还简要研究了重载 smartmatch 运算符 ~~ 但这似乎也没有解决问题(始终默认为正则表达式匹配而不是重载)。
编辑:我查看了~~ 更多,发现my $ret = $overloaded ~~ q/regex/ 由于智能匹配规则而起作用。关闭,但不是一个理想的解决方案,我希望它在 5.10 之前工作,所以我欢迎其他答案。
【问题讨论】:
-
我想如果你想让它在 5.10 之前工作,那么为正则表达式引擎提供一个包装器也行不通。
-
结束疯狂!学习 Python!
-
@bukzor:我很确定您不能在 Python 中重载正则表达式绑定运算符,因为它没有。当然,你可以编写一个类来提供类似的、有限的功能:code.activestate.com/recipes/…
-
@Adam => 当然同样可以在 perl 中完成。我一直在考虑让
$overloaded == qr/.../的通常毫无意义的情况与$overloaded =~ /.../的行为方式相同。至少可以在 5.10 之前使用...
标签: regex perl operator-overloading overloading