了解Lua函数如何工作?

我有一个使用多个 Lua 脚本的 HTML 项目,但我对一个函数的功能存在很大理解问题(我是 Lua 新手):

........................

所有的 require 都已经完成并且路径也已经定义

local fs = require "lfs"

local const = {}
for num = 1, 14 do
    const[num] = assert(
        dofile (const_path .. mkfilename(num)),
        "Failed to load constant configuration  ".. num ..".")
end

local function file_number()  -- 这是让我头疼的函数
    local ci, co, num = ipairs(const) -- 当我打印 num 时,num 是 0,ci 和 co 是 nil
    local vi, vo, _   = fs.dir(virt_path) -- 这里的 _ 表示什么?
    local function vix(o)
        local file = vi(o)
        if file == nil then return nil end
        local number = file:match("^(%d+).lua$")
        if number == nil then return vix(o) end
        return tonumber(number)
    end
    local function iter(o, num)
        return ci(o.co, num) or vix(o.vo, num) -- 这里 ci 是如何定义或实现的?
    end
    return iter, {co=co, vo=vo}, num -- 这里的返回值是什么?
end

这个函数是有效的,但我仍然不理解为什么和如何工作,如果有提示,我会非常感激。

点赞
用户258523
用户258523

_通常是一个可以丢弃的变量。

然而,在这种情况下,它没有任何用处,可以完全省略。

ci应该是一个函数,co应该是一个表。

类似的(虽然我不能确定vo),vivo的情况也是一样的。

函数使用迭代器函数和从ipairsfs.dir函数返回的状态返回来构造自己的迭代器。

return iter,{co = co,vo = vo},num返回一个迭代器函数,一个用于状态的表以及初始循环变量(从最初的ipairs调用中得到的0)。

在循环中使用它将循环遍历civix的值。

2014-12-16 16:21:51