我已经看到哈希字符'#'在Lua中被添加到变量的前面。
它做什么?
实施例
-- sort AIs in currentlevel
table.sort(level.ais, function(a,b) return a.y < b.y end)
local curAIIndex = 1
local maxAIIndex = #level.ais
for i = 1,#currentLevel+maxAIIndex do
if level.ais[curAIIndex].y+sprites.monster:getHeight() < currentLevel[i].lowerY then
table.insert(currentLevel, i, level.ais[curAIIndex])
curAIIndex = curAIIndex + 1
if curAIIndex > maxAIIndex then
break
end
end
end
如果已经有人问过道歉,我已经在互联网上搜索了很多,但我似乎找不到答案。提前谢谢!
答案 0 :(得分:46)
长度运算符由一元运算符#表示。字符串的长度是它的字节数(也就是每个字符是一个字节时字符串长度的通常含义)。
表t的长度定义为任何整数索引n,使得t [n]不为零且t [n + 1]为零;此外,如果t [1]为零,则n可以为零。对于常规数组,非n值从1到给定n,其长度恰好是n,即其最后一个值的索引。如果数组具有“空洞”(即,其他非零值之间的nil值),那么#t可以是直接在nil值之前的任何索引(也就是说,它可以将任何这样的nil值视为结束的数组)。
答案 1 :(得分:0)
#
是lua长度运算符,可用于字符串或表数组
示例:
print(#"abcdef") -- Prints 6
print(#{"a", "b", "c", 88}) -- Prints 4
-- Counting table elements is not suppoerted:
print(#{["a"]=1, ["b"]=9}) -- # Prints 0
答案 2 :(得分:0)
Mercury回答的最后一种情况显示了没有序列的表失败。可以使用以下元表元方法来更改此行为:__len
您知道全局表
_G
吗?如何计算那里的条目?
lua -i
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> #_G
0
> setmetatable(_G,{__len=function(len) local incr=0 for _ in pairs(len) do incr=incr+1 end return incr end})
table: 0x5659b6d0
> #_G
36
...然后适用于非顺序条目。因为它只计算所有键。这也适用于以arg
开头的特殊情况arg[0]
,其中零不在序列中,因为在Lua中,序列以1
arg
案例-没有特殊的元方法__len
> arg
table: 0x565a0ab0
> #arg
1
> arg[#arg]
-i
> arg[#arg-#arg]
lua
> arg[0]
lua
有关字符串
len
的信息。 字符串已经用所有__index
函数填充了元方法string
。我有一个显示它们的辅助函数help()
。还有一个辅助函数dump()
来显示一个表。info()
可以缩短debug.getinfo()
。
> info(help).source
-- help
return function(help)
dump(debug.getmetatable(help).__index)
end
> info(dump).source
-- dump
return function(dump)
for key,value in pairs(dump) do
io.write(string.format("%s=%s=%s\n",key,type(value),value))
end
end
> help(_VERSION)
byte=function=function: 0x565b54b0
packsize=function=function: 0x565b7110
dump=function=function: 0x565b6c80
match=function=function: 0x565b8540
upper=function=function: 0x565b57a0
unpack=function=function: 0x565b7250
len=function=function: 0x565b52c0
find=function=function: 0x565b8550
pack=function=function: 0x565b75f0
gsub=function=function: 0x565b8560
rep=function=function: 0x565b59f0
lower=function=function: 0x565b5ba0
char=function=function: 0x565b5f10
reverse=function=function: 0x565b5830
sub=function=function: 0x565b58c0
gmatch=function=function: 0x565b5e70
format=function=function: 0x565b6030
> _VERSION:len()
7
因此,您可以使用_VERSION:len()
作为长度(:
导致len
的参数为_VERSION
)