Lua支持装饰器吗?
我之前是用Python的,特别喜欢Python中的装饰器功能。
请问Lua支持装饰器吗?
我看过这个链接,但还是不太明白: http://lua-users.org/wiki/DecoratorsAndDocstrings
更新
如果可以的话,能给个例子说明怎么在Lua中实现装饰器吗?
1 个回答
10
你提到的“装饰器”在你引用的页面上有介绍(比如在这个链接中用来添加类型检查),其实和Python里那种奇怪名字的“装饰器语法”没什么关系。Python的装饰器语法是用来以特定方式应用高阶函数(HOF)的,而Lua的装饰器是在Lua的维基上描述的一种用法,它是为了支持“装饰者设计模式”,通过在单独的全局表中保存“额外属性”(比如文档字符串、类型检查函数等)来实现的。
Lua确实支持高阶函数(我不太确定你是否可以把一个函数名重新绑定到应用高阶函数后的结果上,但你可以很简单地使用一个匿名的“原始函数”,然后只把名字绑定到高阶函数的结果上,使用那个匿名函数作为参数)。
Python的“装饰器语法”看起来很不错(让我惊讶的是,这似乎让大多数Python程序员使用高阶函数的频率提高了很多!),但其实在Lua中也能做到这些功能,并没有什么本质上的区别。而且Lua的匿名函数在性能上远远超过Python那种奇怪、有限制的lambda
,就像在JavaScript中一样,它们的能力基本上和“正常”的命名函数是一样的,语法也差不多!