单独的 return 语句是有效的 Lua 代码吗?

use*_*882 6 lua function pandoc

在 pandoc对过滤器的介绍中,以下代码作为“Lua 过滤器的示例”提供:

return {
  {
    Strong = function (elem)
      return pandoc.SmallCaps(elem.c)
    end,
  }
}
Run Code Online (Sandbox Code Playgroud)

我从未在 Lua 中见过独立的 return 语句,如上面的示例所示。此外,我在官方参考文献中看不到此语法的记录。

谁能告诉我以下信息:

  • 这是否是有效的Lua?
  • Lua文档中哪里记录了它?

LMD*_*LMD 5

是的,这是有效的 Lua。Lua 文件或字符串称为“块”,基本上是函数,因此可能包含return像任何其他函数一样的语句。他们的参数可以通过 vararg 访问...

\n

Lua 5.4 参考手册中有关 Chunks 的部分对此进行了记录:

\n
\n

Lua 将块作为具有可变数量参数的匿名函数的主体来处理(参见 \xc2\xa73.4.11)。因此,块可以定义局部变量、接收参数和返回值。

\n
\n
\n

当从命令行启动 Lua 文件时,...将是命令行参数。当手动loading 字符串或loadfileing 文件时,您会得到作为函数返回的块,并且可以决定要传递的内容。

\n
\n

事实上,returnrequired 文件中获取某些内容而不是将库函数写入全局命名空间被认为是一种很好的做法。return在这种情况下相当于 JS export

\n

foo.lua

\n
return function()\n    print("foo")\nend\n
Run Code Online (Sandbox Code Playgroud)\n

bar.lua

\n
local foo = require("foo")\nfoo()\n
Run Code Online (Sandbox Code Playgroud)\n