对于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
- 你正在删除你的表,并用int来replace它
- 你不是从表中拉出一个值
尝试:
names = {'John','Joe','Steve'} for i = 1,3 do print(names[i]) end