Lua中双冒号的作用是什么?

我意识到Lua的5.3版本不久前发布,但一直没有理由访问在线文档,直到现在。我可能错了,但我不记得双冒号::的用法像它在那里那么丰富地使用。

我看到它被认为是“特殊标记”,就像其他标记一样(大于、小于、星号等),但我知道那些是干什么用的。

在Lua中使用它们的目的是什么?

点赞
用户3204551
用户3204551

在 Lua 中,:: 只用于一个目的:用于声明可以使用 goto 跳转的标签。

goto label
::label::

goto 语句用于将程序控制权转移到标签处。出于语法原因,在 Lua 中,标签也被视为一种语句:

stat ::= goto Name
stat ::= label
label ::= ‘::’ Name ‘::’

标签在定义它们的整个块中都可见,除非在嵌套块内定义了同名的标签,或在嵌套函数内部。只要不进入局部变量的作用域,goto 就可以跳转到任何可见的标签。

标签和空语句被称为“空语句”,因为它们不执行任何动作。

\* 我不认为在 Lua 本身的文档中广泛使用扩展的 BNF 是使用。

2016-01-06 00:18:03