对于Lua的Loop

我的任务是如何做一个for循环。 我已经从数字的angular度弄清楚了,但是不能用名字来解释。 我想创build一个循环,运行一个名称列表。 以下是我到目前为止:

names = {'John', 'Joe', 'Steve'} for names = 1, 3 do print (names) end 

我已经尝试了一些其他的东西,但它不工作,terminal总是只列出1,2,3 …我做错了什么?

你的问题很简单:

 names = {'John', 'Joe', 'Steve'} for names = 1, 3 do print (names) end 

这段代码首先声明一个名为全局variables。 然后,你开始一个for循环。 for循环声明了一个局部variables,它恰好也被称为names ; 事实上,一个variables之前被定义为names是完全不相关的。 在for循环中任何names使用都会引用本地名称 ,而不是全局名称。

for循环说,循环的内部将被调用names = 1 ,然后names = 2 ,最后names = 3 。 for循环声明了一个从第一个数字到最后一个数字的计数器 ,它将为每个值计算一次内部代码。

你真正想要的是这样的:

 names = {'John', 'Joe', 'Steve'} for nameCount = 1, 3 do print (names[nameCount]) end 

[]语法是你如何访问一个Lua表的成员。 Lua表将“键”映射为“值”。 您的数组自动创build整数types的键,这将增加。 所以与表中的“Joe”关联的键是2(Lua索引总是从1开始)。

因此,你需要一个for循环,从1到3,你得到。 您可以使用countvariables来访问表中的元素。

但是,这有一个缺陷。 如果从列表中删除某个元素,会发生什么情况?

 names = {'John', 'Joe'} for nameCount = 1, 3 do print (names[nameCount]) end 

现在,我们得到John Joe nil ,因为试图访问不存在的表中的值导致nil 。 为了防止这种情况,我们需要从1到表的长度计数:

 names = {'John', 'Joe'} for nameCount = 1, #names do print (names[nameCount]) end 

#是长度运算符。 它在表和string上工作,返回任一长度。 现在,无论大小names如何,这总是有效的。

但是,有一个更方便的方法来迭代项目数组:

 names = {'John', 'Joe', 'Steve'} for i, name in ipairs(names) do print (name) end 

ipairs是一个遍历列表的Lua标准函数。 for循环的这种风格,迭代器for循环,使用这种迭代器函数。 i值是数组中条目的索引。 name值是该索引处的值。 所以它基本上为你做了很多努力的工作。

通过在线阅读( 表格教程 ),似乎表格的行为像数组,所以你正在寻找:

WAY1

 names = {'John', 'Joe', 'Steve'} for i = 1,3 do print( names[i] ) end 

Way2

 names = {'John', 'Joe', 'Steve'} for k,v in pairs(names) do print(v) end 

Way1使用表index/key ,在你的表names每个元素都有一个从1开始的键,例如:

 names = {'John', 'Joe', 'Steve'} print( names[1] ) -- prints John 

所以你只是让i从1到3。

Way2上,您可以指定要运行的表,并为其键和值分配一个variables,例如:

 names = {'John', 'Joe', myKey="myValue" } for k,v in pairs(names) do print(k,v) end 

打印以下内容:

 1 John 2 Joe myKey myValue 
 names = {'John', 'Joe', 'Steve'} for names = 1, 3 do print (names) end 
  1. 你正在删除你的表,并用int来replace它
  2. 你不是从表中拉出一个值

尝试:

 names = {'John','Joe','Steve'} for i = 1,3 do print(names[i]) end