lzkd 发表于 2011-9-16 21:36:36

原帖由 selfmud 于 2011-9-16 09:30 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
以下是lua5.1中文手册中查到的

ipairs (t)
Returns three values: an iterator function, the table t, and 0, so that the construction

   for i,v in ipairs(t) do body end

will iterate over the...

k 是键值,即key,数组中的下标
v 是内容,即value数组中的内容
lua的数组(或者说table也行)是从1开始的。
那个东西就是一个最普通的循环。

selfmud 发表于 2011-9-16 21:41:11

我想了想,是不是这个K其实没啥用?
这个V应该就是出发列表的值吧
或者我这样理解GetTiggerList()后获取的是所有的触发,也就是说是个数组,里面的内容是所有的触发
然后k就相当于这个数组的第几个数值 ,比如1,2,3,4,5....之类的东西
V就是对应的内容,比如第一个对应的是V,第二个对应的还是V,,反正所有k对应的都是V,然后所有的V都被设定成ture,也就是打开状态
是这个意思?

selfmud 发表于 2011-9-16 21:46:39

看来我理解的差不多
那就是说这是ipairs (t)的固定的用法
一般是这样,t就相当于一个要遍历的数组
然后写作
for k,v in ipairs(要遍历的数值所在的数组)
do 要做的事情
end--结束

selfmud 发表于 2011-9-16 21:54:13

插到2个函数
LUA手册中对与pairs,ipairs解释如下:




ipairs (t)
Returns three values: an iterator function, the table t, and 0, so that the construction

for i,v in ipairs(t) do body end
will iterate over the pairs (1,t), (2,t), ···, up to the first integer key absent from the table.








pairs (t)
Returns three values: the next function, the table t, and nil, so that the construction

for k,v in pairs(t) do body end
will iterate over all key–value pairs of table t.

See function next for the caveats of modifying the table during its traversal.



这样就可以看出ipairs以及pairs 的不同。



pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;



但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key
下面举个例子吧!

eg:
local tabFiles = {
= "test2",
= "test3",
= "test1"
}

for k, v in ipairs(tabFiles) do
print(k, v)
end


猜测它的输出结果是什么呢?

根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。


>lua -e "io.stdout:setvbuf 'no'" "Test.lua"

>Exit code: 0


那么,如果是
for k, v in pairs(tabFiles) do
print(k, v)
end

则会输出所有 :
>lua -e "io.stdout:setvbuf 'no'" "Test.lua"
3 test2
6 test3
4 test1
>Exit code: 0


现在改变一下表内容,
local tabFiles = {
= "test1",
= "test2",
= "test3"
}

for k, v in ipairs(tabFiles) do
print(k, v)
end
现在的输出结果显而易见就是key=1时的value值test1


>lua -e "io.stdout:setvbuf 'no'" "Test.lua"
1 test1
>Exit code: 0

好了现在已经说的很清楚啦,以后继续咯~~

[ 本帖最后由 selfmud 于 2011-9-16 10:06 PM 编辑 ]

selfmud 发表于 2011-9-16 21:57:44

Lua语言中pairs和ipairs的区别 .
分类: lua相关 2011-04-16 17:51 163人阅读 评论(1) 收藏 举报

tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = "dos"}

for key, value in ipairs(tbl) do

print(key, value)

end

--pairs()

--pairs()函数基本和ipairs()函数用法相同, 区别在于pairs()可以遍历整个table, 即包括数组及非数组部分.

-->如有pairs迭代输出如下:

-->1 alpha

-->2 beta

-->one uno

-->two dos

-->如有ipairs迭代输出如下:

--ipairs()

--ipairs()函数用于遍历table中的数组部分.

-->1 alpha

-->2 beta

selfmud 发表于 2011-9-16 21:58:43

看起来如果想达到我那个关闭所有触发的目的的话
pairs和ipairs都可以实现。

cuiwei 发表于 2011-11-2 21:38:02

world.SetOption("enable_triggers",0)

这个也可以关闭所有触发吧???
页: 1 [2]
查看完整版本: 请问mush中有没有办法一次性打开所有的触发器