我的任务是如何做一个for循环。我已经计算出来的数字,但不能说出来的名称。我想创建一个循环下来的名称列表。以下是我到目前为止:
names = {'John','Joe','Steve'} for names = 1,3 do print (names) end
我试过一些其他的东西,但它只是不工作,终端总是只是列出1,2,3 …我做错了什么?
解决方法
你的问题很简单:
names = {'John',3 do print (names) end
这段代码首先声明一个名为names的全局变量。然后,你启动一个for循环。 for循环声明一个局部变量,刚刚被称为名称;事实上变量以前用名称定义是完全不相关的。在for循环中任何使用名称都将引用本地引用,而不是全局引用。
for循环说,循环的内部将使用names = 1,然后names = 2,最后names = 3来调用。for循环声明一个从第一个数到最后一个计数的计数器,它将调用内部代码为其计数的每个值一次。
你真正想要的是这样的:
names = {'John','Steve'} for nameCount = 1,3 do print (names[nameCount]) end
[]语法是如何访问Lua表的成员的。 Lua表将“键”映射到“值”。您的数组自动创建整数类型的键,其增加。因此在表中与“Joe”相关联的键是2(Lua索引总是从1开始)。
因此,你需要一个从1到3的for循环,你得到。您可以使用count变量来访问表中的元素。
然而,这有一个缺陷。如果从列表中删除其中一个元素,会发生什么?
names = {'John','Joe'} for nameCount = 1,3 do print (names[nameCount]) end
现在,我们得到John Joe nil,因为尝试访问不存在的表中的值会导致nil。为了防止这种情况,我们需要从1到表的长度:
names = {'John',#names do print (names[nameCount]) end
#是长度运算符。它适用于表和字符串,返回其长度。现在,无论多么大或小的名字得到,这将总是工作。
但是,有一个更方便的方法来遍历一个项目数组:
names = {'John','Steve'} for i,name in ipairs(names) do print (name) end
ipairs是一个遍历列表的Lua标准函数。这种风格的for循环,迭代器for循环,使用这种迭代器函数。 i值是数组中条目的索引。名称值是该索引处的值。所以它基本上做了很多grunt工作为你。