Lua中的#代表什么意思?

59

我在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个回答

74

这是长度运算符

长度运算符由一元运算符#表示。字符串的长度是其字节数(即,当每个字符为一个字节时,字符串长度的通常含义)。

表t的长度被定义为任何整数索引n,使得t [n]不为nil且t [n + 1]为nil; 此外,如果t [1]为nil,则n可以为零。对于正常数组,从1到给定n具有非nil值的数组,其长度正好为n,即其最后一个值的索引。如果数组有“空洞”(即,在其他非nil值之间有nil值),则#t可以是直接在nil值之前的任何索引(即,它可以将任何此类nil值视为数组的结尾)。


我为什么会得到一个语法错误unexpected symbol near '#'呢?这是别人的代码,似乎没有其他人遇到问题... - Michael

6
#是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

#通常用于获取表格的范围。例如:

local users = {"Grace", "Peter", "Alice"}
local num_users = #users

print("There is a total of ".. num_users)

输出: 3

或者获取字符串长度的方法:print(#_VERSION) -- 结果是:7 - koyaanisqatsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接