#a在Lua中意味着什么?

时间:2013-07-31 15:30:41

标签: lua

我已经看到哈希字符'#'在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

如果已经有人问过道歉,我已经在互联网上搜索了很多,但我似乎找不到答案。提前谢谢!

3 个答案:

答案 0 :(得分:46)

那是length operator

  

长度运算符由一元运算符#表示。字符串的长度是它的字节数(也就是每个字符是一个字节时字符串长度的通常含义)。

     

表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