Estoy trabajando en una pequeña DSL que utiliza la recuperación nomethod
para sobrecargar para capturar los operadores utilizados en los valores sobrecargados. Esto es similar a la función del symbolic calculator que se describe en la documentación de overload
.¿Hay alguna forma de sobrecargar el operador de vinculación de expresiones regulares `= ~` en Perl?
Esto funciona bien para los operadores de comparación estándar, pero tenga en cuenta lo siguiente:
my $ret = $overloaded =~ /regex/;
En este caso, se llama a nomethod
a stringify $overloaded
, y después de que la sobrecarga se pierde. Pensé en devolver una variable atada, que al menos me permitiría transportar el objeto sobrecargado original, pero eso aún se perderá durante la ejecución de la expresión regular.
Por lo tanto, la última pregunta es si hay alguna manera de extender la idea de overload
's de una calculadora simbólica para incluir la operadores =~
y !~
vinculante expresiones regulares, de modo que el ejemplo de código anterior llamaría nomethod
con ($overloaded, qr/regex/, 0, '=~')
o algo similar?
También analicé brevemente la sobrecarga del operador de SmartChch ~~
, pero eso tampoco pareció ser el truco (siempre se utiliza de forma predeterminada la coincidencia de expresiones regulares en lugar de la sobrecarga).
Editar: He buscado en ~~
más, y encontré que my $ret = $overloaded ~~ q/regex/
funciona debido a las reglas de Smartmatching. Cerrar, pero no es una solución ideal, y me gustaría que funcione antes de 5.10, así que agradezco otras respuestas.
Supongo que el suministro de un contenedor al motor de expresiones regulares tampoco funcionaría si quiere que funcione antes de 5.10. –
¡Termine con la locura! ¡Aprende Python! – bukzor
@bukzor: estoy bastante seguro de que no se puede sobrecargar el operador de enlace regex en Python, ya que no tiene uno. Por supuesto, podría escribir una clase que le brinde una funcionalidad similar y limitada: http://code.activestate.com/recipes/302498-re-match-and-replace-through-operator-overloading/ –