【问题标题】:use "#" operator to calculate the length of a table in Lua? [duplicate]Lua 中使用“#”运算符计算表的长度? [复制]
【发布时间】:2015-05-28 17:08:36
【问题描述】:

当我使用# 计算表格的长度时,我有一个问题。例如:

local t = {"a", "b"}
local t1 = {"a", nil}
print(#t)       -- 2
print(#t1)      -- 1

local t = {"a", "b"}
local t1 = {nil, "a"}
print(#t)       -- 2
print(#t1)      -- 2

谁能告诉我为什么会这样?

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    除非定义了__len 元方法,否则# 运算符只能对作为序列的表进行操作。

    一个序列是一个表,它的正数字键的集合等于{1..n},对于一些非负整数n

    在你的例子中:


    local t = {"a", "b"}
    

    t 是一个长度为2 的序列。


    local t1 = {"a", nil}
    

    等价于local t1 = {"a"},所以t1是一个长度为1的序列。


    local t1 = {nil, "a"}
    

    t1 不是序列,所以 #t1 没有定义。

    【讨论】:

    • local t1 = {nil, "a"} t1 不是序列,这意味着 #t1 返回错误的长度。
    • @user1723404 对于不是序列的表,没有就“正确”长度达成一致。实际上,对于非序列,Lua 可能会为具有相同条目的表返回不同的结果。例如,如果您测试local t1 = {nil, "a"}; print(#t1),您可能会得到2。但是如果你测试local t1={}; t[1]=nil; t[2]="a"; print(#t1),你可能会得到0
    • @user1723404 #t1 未定义,表示它没有 正确 值。特别是,您可能会在不同的 Lua 实现中获得不同的价值。
    猜你喜欢
    • 2019-12-14
    • 2015-05-09
    • 1970-01-01
    • 2017-03-14
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多