Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用「#&引用;运算符来计算Lua中表格的长度?_Lua_Lua Table - Fatal编程技术网

使用「#&引用;运算符来计算Lua中表格的长度?

使用「#&引用;运算符来计算Lua中表格的长度?,lua,lua-table,Lua,Lua Table,当我使用#计算表的长度时,我有一个问题。例如: local t = {"a", "b"} local t1 = {"a", nil} print(#t) -- 2 print(#t1) -- 1 有人能告诉我为什么吗?除非定义了\uu len元方法,运算符只能在序列表上操作 序列是一个表,对于某些非负整数n,其正数字键集等于{1..n} 在您的示例中: t是长度为2的序列 相当于local t1={“a”},因此t1是一个长度为1的序列 t1不是序列,因此未定义#

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

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


有人能告诉我为什么吗?

除非定义了
\uu len
元方法,
运算符只能在序列表上操作

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

在您的示例中:


t
是长度为
2
的序列


相当于
local t1={“a”}
,因此
t1
是一个长度为
1
的序列



t1
不是序列,因此未定义
#t1

local t1={nil,“a”}t1不是序列,这是否意味着#t1返回错误的长度。@user1723404对于非序列的表,没有约定“正确”的长度。实际上,对于非序列,Lua可能会为具有相同条目的表返回不同的结果。例如,如果您测试
localt1={nil,“a”};打印(#t1)
您可能会得到
2
。但是如果你测试
localt1={};t[1]=nil;t[2]=“a”;打印(#t1)
您可能会得到
0
@user1723404
。#t1
未定义,表示它没有正确的值。特别是,在不同的Lua实现中可能会得到不同的价值。
local t = {"a", "b"}
local t1 = {nil, "a"}
print(#t)       -- 2
print(#t1)      -- 2
local t = {"a", "b"}
local t1 = {"a", nil}
local t1 = {nil, "a"}