CWDG论坛-专业魔兽插件's Archiver

tg123 发表于 2007-8-20 01:56

可能是Lua的bug

table.foreach({1,"two",3}, function(k,v) print(k,v) return k<2 and nil end)

摘自wowwiki的句子

说下我的关键问题
foreach(table, [color=red]function(k,v) ; end[/color]) -- 语句 X

大家注意红色的部分
估计这个代码在运行时后生成一个无名函数 某f
然后foreach调用 某f
但是 语句 X 运行一次 就会生成一个 某f 并且某f不被垃圾收集器吃掉
严重吃内存

大家用for index,value in pairs(table) do 代替把
希望某人能联系下lua……

cosin0002 发表于 2007-8-20 06:24

垃圾回收又不是即时的。。。
否则CPU都给垃圾回收进程占去了

炽火 发表于 2007-8-21 23:21

这个不算是Bug吧,本来foreach就是老式的用法,不建议使用的。

simonw 发表于 2007-8-21 23:54

手册上这样说:
Functions table.foreach and table.foreachi are deprecated. You can use a for loop with pairs or ipairs instead.

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.