[Python-es] ¿Cierres en Py thon?

Esteban Manchado Velázquez zoso en demiurgo.org
Jue Ago 8 15:21:52 CEST 2002


On Thu, Aug 08, 2002 at 09:53:22AM +0200, Jose Alejandro Perez Rubio wrote:
> [...]
> Creo entender el problema inicial, pero si esto funciona por que no
> hacer ...
> 
> [...]
> 
> Recordaba algún caso parecido, pero no se donde, en cualquier caso
> probé lo siguiente:
> [...]
> Y obtuve lo que se podía esperar:
> [...]
> 
> ¿Quizá no entendido nada? o ¿Jabber hace algo raro con sus
> MessageHandlers?

   Pues eso parece, porque creo que probé a pasar como manejador un
«self.metodo» (como dice la anterior solución que propones) y no podía. En
cualquier caso, está arreglado (con una función lambda con un parámetro con
valor por omisión).

   La solución final fue crear una función lambda con cuatro parámetros
(porque había un tercero optativo en la función de vuelta):

--------------------------- 8< ---------------------------
class foo:
   def __init__(self):
      # ...
      self.mensajeJabberLambda = \
               lambda con, msg, out, s = self: s.mensajeJabber(con, msg)
      self.jabberCon.setMessageHandler(self.mensajeJabberLambda)
      # ...

   def mensajeJabber(self, con, msg):
      print "¡Mensaje nuevo! %s" % msg
--------------------------- >8 ---------------------------

Probablemente, en «condiciones normales», habrían funcionado las propuestas
que enviaron, pero me da que hay algo muy raro en la llamada que hace el
Jabber.

   Bueno, gracias a todos de nuevo. Saludos,

-- 
Esteban Manchado Velázquez <zoso*demiurgo*org> - http://www.demiurgo.org
No software patents in Europe! - freepatents.org - proinnova.hispalinux.es
Join Amnesty International - http://www.amnesty.org/actnow


Más información sobre la lista de distribución Python-es