独立顶层return语句是否为合法有效的Lua代码?
在pandoc过滤器介绍章节中,如下代码被作为Lua过滤器示例给出:
return { { Strong = function (elem) return pandoc.SmallCaps(elem.c) end, } }
针对提出的两个问题解答如下:
- 该写法是完全合法的Lua语法。
很多刚接触Lua的人会误以为return只能写在显式声明的函数内部,这是非常常见的误解。Lua从语法层面就允许在代码块的最顶层写return语句:Lua加载执行任何外部脚本时,都会把整个脚本的内容包装成一个匿名可变参函数来运行,顶层return返回的值,会直接传递给加载脚本的宿主程序——在这个场景里宿主就是pandoc,它本来就要求过滤器脚本最终返回配置好的规则表,所以示例写法完全符合pandoc过滤器的加载约定。你可以自己做个极简验证:新建一个Lua文件只写return 123,通过dofile加载这个文件,就能正常拿到返回值123,全程不会触发任何语法报错。 - 该语法的官方说明对应Lua参考手册里的语句块(Block)定义部分:手册明确说明,语句块是按顺序执行的语句序列,return是块内允许出现的合法语句,作用是终止当前块的执行,同时向块的调用方返回指定值。因为整个脚本文件本身就是一个被Lua虚拟机调用的顶层语句块(也就是前面提到的包装出来的匿名函数),所以在文件最外层写return完全符合语法规则,不存在什么特殊的语法拓展或者非标写法。
内容的提问来源于stack exchange,提问作者user32882
相关产品推荐
相关产品推荐

