2010-09-04 15 views
8

Vengo de un fondo de Python y realmente me gusta el poder de los decoradores de Python.¿Admite Lua los decoradores?

¿Admite Lua Decorators?

He leído el siguiente enlace pero no está claro para mí: http://lua-users.org/wiki/DecoratorsAndDocstrings

ACTUALIZACIÓN

¿Le importaría también dado un ejemplo de cómo la manera de ponerla en práctica en Lua si es posible.

+1

Lua puede implementar envolturas alrededor de funciones tan bien como Python puede; simplemente no tiene una sintaxis especial, ya que Lua apunta a tener una sintaxis básica (por defecto, ya que carece de elementos básicos como 'continuar' y' + = '). –

Respuesta

9

Los "decoradores" documentados en la página que cita (y utilizados por ejemplo en this one para agregar verificación de tipo) tienen poco que ver con la extraña "sintaxis de decorador" de Python para una forma específica de aplicar un orden superior función (HOF) - más bien, los decoradores descritos y utilizados en el wiki de Lua son un idioma Lua para admitir una aplicación de las funciones Decorator Design Pattern a Lua (manteniendo "atributos adicionales" - como docstrings, funciones de verificación de tipo, etc. - en tablas globales separadas).

Lua hace Höfs de apoyo (no estoy seguro si se puede volver a unir un nombre de función al resultado de la aplicación de un HOF a la función, pero se puede fácilmente, como las páginas wiki muestran, utilizar un anónimo "función original" y solo vincula un nombre al resultado del HOF con esa función anon como arg).

La sintaxis de sintaxis del decorador de Python es agradable (y, para mi sorpresa, parece haber aumentado el uso de HOF por la mayoría de los Pythonistas en un orden de magnitud! -), pero no hay nada intrínseco o esencial en ellos que no se puede hacer en Lua (y las funciones anónimas de Lua corren alrededor de la ridícula y limitada lambda de Python, al igual que en Javascript, tienen esencialmente el mismo poder, y casi la misma sintaxis, como una función con nombre "normal").)

+1

¿te importaría dar un ejemplo sobre cómo implementar un HOF en Lua? Gracias – nickb

+1

@user, la página wiki que citó está llena de tales ejemplos: funciones que toman argumentos de función y/o resultados de función de retorno (eso es lo que una función de orden superior, aka HOF, ** es **, por definición ;-) . ¡No creo que haya ningún valor agregado en mí al copiar y pegar cualquiera de esos ejemplos o variaciones al respecto! –

+2

Las funciones en Lua son valores de primera clase. En realidad, no tienen nombres en absoluto. Usted "vincula" un nombre a una función al almacenarlo en una variable de ese nombre. Entonces, para volver a enlazar una función existente, simplemente reemplaza su valor, teniendo cuidado de retener el acceso al valor anterior si es necesario, por supuesto. – RBerteig