lua 之for循环 疑问。

来源:互联网 发布:西安九索数据怎么样 编辑:程序博客网 时间:2024/05/21 16:22

          我看的lua中文教程,好像是5.1得把。

          下的那个编译器也是5.1 lua for windows

          看到for循环这里。 一直不是很清楚。

          书里写的是 

          t = {1,9,5,20}

          for k in pairs(t) do print(k) end

          说这样可以遍历t.

      但是我写到编译器里面就编译不了,报错。

      将他改为

          t = {1,9,5,20}

          for _,k in pairs(t) do print(k) end

就可以编译了。

      具体原因是for循环应该标准的有3个语句,   在这里只有一句,编译不了,加一个匿名的变量,就可以通过。

      是作者翻译的时候写错了?  还是这是正确的? 版本问题呢。

network = {{name = "arraial",IP = "192.168.1.1"},
   {name = "lua",    IP = "192.168.1.106"},
   {name = "derain", IP = "192.168.1.100"}}
table.sort(network,function (a,b) return (a.name < b.name) end)
for  _,v in pairs(network) do print(v.name,v.IP) end

 lua里面 貌似函数的写法很独特啊,匿名函数很给力。

network = {{name = "arraial",IP = "192.168.1.1"},
   {name = "lua",    IP = "192.168.1.106"},
   {name = "derain", IP = "192.168.1.100"}}
table.sort(network,function (a,b) return (a.name < b.name) end)
for _,v in pairs(network) do print(v.name,v.IP) end             // 这里为什么一定要在for后面加一个匿名变量

function list_iter(t)
 local i = 0
 local n = table.getn(t)
 return function ()
 i = i + 1
 if i <= n then return t[i] end
 end
end
t = {10,20,30}
for k in list_iter(t) do                                 //这里又不能加,加了就全部都输出nil
 print(k)
end

         太没规律了,就因为表 跟 迭代器的问题?  迭代器直接就可以遍历,pairs 实现方式,到底是怎么实现的呢??

        迭代器提供了一个上一次调用的状态与下一次调用成功状态。pairs就没有这种机制。

0 0
原创粉丝点击