【发布时间】:2019-04-14 03:31:26
【问题描述】:
根据我的 Lua 知识(以及根据我在 Lua 手册中阅读的内容),我一直认为 Lua 中的标识符仅限于 A-Z & a-z & _ & 数字(并且不能开始使用digit 也不是保留关键字,即local local = 123)。
现在我遇到了一些(混淆的)Lua 程序,它使用各种奇怪的字符作为标识符:
https://i.imgur.com/HPLKMxp.png
-- Most likely, copy+paste won't work. Download the file from https://tknk.io/7HHZ
print(_VERSION .. " " .. (jit and "JIT" or "non-JIT"))
local T = {}
T.math = T.math or {}
T.math.​â®â€‹âŞâ®â€‹ď»żâ€Śâ€âŽ = math.sin
T.math.â¬â€‹ââ¬ââ«â®â€â€¬ = math.cos
for k, v in pairs(T.math) do print(k, v) end
输出:
Lua 5.1 JIT
â¬â€‹â€â«â€â€â€¬ 功能:内置#45
​â®â€‹âŞâ®â€‹ď»żâ€Śâ€âŽ function: builtin#44
我不清楚,为什么标识符允许使用这组字符?
换句话说,为什么它是一个完全有效的 Lua 程序?
【问题讨论】:
-
显示任何在线 Lua 示例。
-
@MikeV。在线 Lua 示例是什么意思?
-
无论如何,我发现任何 ASCII 码高于 127 的 Unicode 字符都是完全有效的标识符(仍然不知道为什么在 Lua 中允许这样)。这很有趣,我正在考虑在某个时候做我自己的 Lua 混淆器。
-
从 0x80 一直到 0xFFFF(检查 Unicode 表)。该范围包含各种字符,并且所有这些字符都可以用作标识符的一部分。我简直不敢相信。谁能解释一下?
-
例如:tutorialspoint - 无效。任何在线 Lua 编译器也是如此。