List 如何停止对列表中的nil值进行计数

List 如何停止对列表中的nil值进行计数,list,lua,null,counting,List,Lua,Null,Counting,我有一个函数,它返回“Match”if true和nilelse。我需要知道列表中“匹配”的值的数量(因此在函数中使用nil作为另一个值) 我最初的问题是,是否有什么东西我应该返回以外的零 #运算符的定义方式相当怪异;它将一直计数到其中一个非nil元素。在您的情况下,它也完全可能返回1。这是因为 因此,没有确定的方法可以迭代这样一个表,除非您知道它的大小,并且可以自己停止迭代 最好存储一个专用的“falsy”值,然后使用与问题无关的ipairs手动迭代和计数:如果为真,为什么不直接返回true,

我有一个函数,它返回
“Match”
if true和
nil
else。我需要知道列表中
“匹配”的值的数量
(因此在函数中使用
nil
作为另一个值)

我最初的问题是,是否有什么东西我应该返回以外的零

#
运算符的定义方式相当怪异;它将一直计数到其中一个非nil元素。在您的情况下,它也完全可能返回
1
。这是因为

因此,没有确定的方法可以迭代这样一个表,除非您知道它的大小,并且可以自己停止迭代


最好存储一个专用的“falsy”值,然后使用与问题无关的
ipairs

手动迭代和计数:如果为真,为什么不直接返回true,否则返回false?返回true和false没有问题,我实际上是在把别人的代码从DSL转换成Lua,并且保持了惯例。谢谢你的洞察力Bartek,很高兴知道。你介意为我指出正确的实施方向吗?我对Lua很陌生,对桌子很不在行@在原来的问题中,只需将
return nil
更改为
return“NoMatch”
或类似的内容。你只需要一个非零的值。例如,您可以在程序开始时定义它,如
my_nil={}
,然后使用它,您将只存储对该空表的引用。嗨,Bartek,再次感谢,我确实理解这一点,我不完全确定如何使用ipairs!不管怎样,你回答了我的第一个问题question@Bee我从优秀的Lua中学到了关于
ipairs
。@Tom,显然我已经阅读了完整的手册,并尝试使用它来创建这个,但显然仍然存在问题,因此提出了问题。我在别处找到了帮助
someList = {"gdj", nil, "jdis"}

print(#someList) --> 3