Sto lavorando su un DSL piccolo che utilizza il fallback nomethod
per il sovraccarico per acquisire gli operatori utilizzati sui valori sovraccaricati. È simile alla funzione di symbolic calculator descritta nella documentazione di overload
.C'è un modo per sovraccaricare l'operatore di regex binding `= ~` in Perl?
Questo funziona bene per gli operatori di confronto standard, ma considerare quanto segue:
my $ret = $overloaded =~ /regex/;
In questo caso, nomethod
viene chiamato a stringa i $overloaded
, e dopo che il sovraccarico è perduto. Ho pensato di restituire una variabile legata, che mi consentirà almeno di portare in giro l'oggetto originale sovraccarico, ma che comunque si perderà durante l'esecuzione della regex.
Così, l'ultima domanda è se c'è qualche modo per estendere idea overload
's di una calcolatrice simbolica per includere l'operatori =~
e !~
vincolante regex, in modo che il codice di esempio sopra chiamerebbe nomethod
con ($overloaded, qr/regex/, 0, '=~')
o qualcosa di simile?
Ho anche esaminato brevemente l'overloading dell'operatore smartmatch ~~
ma questo non sembra aver risolto il problema (è sempre il valore predefinito di regex matching piuttosto che overloading).
Modifica: ho esaminato più ~~
e ho trovato che my $ret = $overloaded ~~ q/regex/
funziona a causa delle regole di smartmatching. Chiudi, ma non una soluzione ideale, e mi piacerebbe che funzionasse pre 5.10, quindi accolgo con favore altre risposte.
Suppongo che fornire un wrapper al motore regex non funzionerebbe se si desidera che funzioni prima di 5.10. –
Finisci la follia! Impara Python! – bukzor
@bukzor: Sono abbastanza sicuro che non sia possibile sovraccaricare l'operatore di legame regex in Python, poiché non ne ha uno. Naturalmente, potresti scrivere una classe che ti darà funzionalità simili e limitate: http://code.activestate.com/recipes/302498-re-match-and-replace-through-operator-overloading/ –