第 29 章和 31 章。这两章都是讲资源管理的,就放一起看了。
userdata 可能是用户自己分配的一段内存(内存里可能有一个域是文件描述符,可能是一个指向另外一段内存的指针,等等),当这段 userdata 被释放时,其中包含的其它资源也需要被释放(如需要关闭文件,释放另一段内存等)。某些语言提供了一种叫做“finalizer”的机制来完成这件事,在 lua 中对应的是一个 __gc
的域,当某个 userdata 被 lua 回收时,如果它对应的 metatable 中有 __gc
这个域,则这个域所指向的函数(通常指向的是函数)将会被调用,这样用户就能释放和 userdata 相关联的内容。
目录遍历迭代器
第 26 章实现过一个目录遍历的程序,程序每次返回一个包含所有目录项的 table。这里我们将要实现一个迭代器,每次只返回一个目录:
for dname in dir(".") do
print(dname)
end
c 语言中遍历目录的步骤:首先使用 opendir() 函数打开目录返回一个指向 DIR … 阅读全文…