我正在使用一個小的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