50

我已经看到在 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

抱歉,如果已经问过这个问题,我在互联网上搜索了很多,但似乎没有找到答案。提前致谢!

4

3 回答 3

61

那是长度运算符

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

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

于 2013-07-31T15:32:17.643 回答
3

#是适用于字符串或表数组的 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
于 2020-12-16T10:02:10.057 回答
1

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

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

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

输出: 3

于 2021-10-06T11:40:34.420 回答