【问题标题】:Does Lua support Decorators?Lua 支持装饰器吗?
【发布时间】:2011-04-08 02:52:21
【问题描述】:

我来自 Python 背景,非常喜欢 Python 装饰器的强大功能。

Lua 支持装饰器吗?

我已阅读以下链接,但我不清楚:http://lua-users.org/wiki/DecoratorsAndDocstrings

更新

如果可能的话,您是否介意举个例子如何在 Lua 中实现它。

【问题讨论】:

  • Lua 可以像 Python 一样实现函数包装器;它只是没有特殊的语法,因为 Lua 旨在拥有一个非常基本的核心语法(这是错误的,因为它缺少 continue+= 这样的基本内容)。

标签: python programming-languages syntax lua decorator


【解决方案1】:

在您引用的页面上记录的“装饰器”(例如在 this one 中用于添加类型检查)与 Python 的奇怪命名的“装饰器语法”几乎没有关系,用于应用更高的特定方式order function (HOF) -- 相反,在 Lua 的 wiki 中描述和使用的装饰器是一个 Lua 习惯用法,用于支持将 Decorator Design Pattern 应用于 Lua 函数(通过持有“额外属性”——例如文档字符串、类型检查函数等) -- 在单独的全局表中)。

Lua 确实支持 HOF(我不确定您是否可以将函数名称重新绑定到将 HOF 应用于函数的结果,但您可以轻松地,如 wiki 页面所示,使用匿名的“原始函数”,并且仅将名称绑定到 HOF 的结果,并将该匿名函数作为 arg)。

Python 的“装饰器语法”语法糖很不错(而且,令我惊讶的是,大多数 Python 爱好者对 HOF 的使用似乎增加了一个数量级!-),但它们没有任何内在或本质的东西可以在 Lua 中是不行的(而且 Lua 的匿名函数围绕着 Python 的愚蠢、有限的 lambda 运行——就像在 Javascript 中一样,它们具有与“普通”命名函数基本相同的功能和几乎相同的语法! -)。

【讨论】:

  • 您介意举个例子来说明如何在 Lua 中实现 HOF。谢谢
  • @user,你引用的维基页面充满了这样的例子——函数接受函数参数和/或返回函数结果(这就是高阶函数,又名 HOF,是,根据定义;-)。我认为复制和粘贴这些示例或变体不会有任何附加价值!
  • Lua 中的函数是一流的值。他们实际上根本没有名字。您通过将名称存储在该名称的变量中来将名称“绑定”到函数。因此,要重新绑定现有函数,您只需替换它的值,当然,如果需要,请注意保留对旧值的访问权限。
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多