【问题标题】:understanding how a lua function does work?了解 lua 函数是如何工作的?
【发布时间】:2014-12-17 05:29:23
【问题描述】:

我有一个使用多个 lua 脚本的 HTML 项目,我在理解一个函数的功能时遇到了很大的问题(我是 lua 新手):

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

所有要求都已完成,路径也已定义

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()  --this is the function that causes me a headach
    local ci, co, num = ipairs(const)-- when I print num is 0 and ci,co are nil
    local vi, vo, _   = fs.dir(virt_path)--  what does _ mean here ? 
    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)---where is ci defined or impplemented 
    end
    return iter, {co=co, vo=vo}, num-- what 's the return value here ? 
end

该功能有效,但我仍然不明白为什么以及如何,我会很高兴有任何提示。

【问题讨论】:

    标签: function lua


    【解决方案1】:

    _ 通常是一次性变量。

    在这种情况下,尽管它没有任何用处,也可以很容易地被完全排除在外。

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

    vivo 的情况类似(尽管我不能肯定地说 vo)。

    该函数正在使用迭代器函数构造自己的迭代器,并从ipairsfs.dir 函数返回状态。

    return iter, {co=co, vo=vo}, num 行返回一个交互函数、一个状态表和初始循环变量(来自初始 ipairs 调用的0)。

    当用于循环遍历来自civix 的值时。

    【讨论】:

    • 感谢您的回答,当我使用该功能时,告诉文件编号 17 订单丢失,这意味着我可以在 16 之前获得 21 等等,知道为什么吗? , ci 和 vi 在整个程序中只用过一次,而且只在这里
    • @Engine 你只能保证在14(当const用完时)之前得到有序的数字,之后你将从fs.dir得到目录条目顺序(因为我不要相信函数会排序)。
    • 非常感谢您的回答,有办法订购 fs.dir 的返回值
    • @Engine 未就地。对于 Windows,fs.dir 使用 _findfirst/_findnext 与您获得的任何顺序(我不知道)。在非 Windows 上,fs.dir 使用 readdir,该顺序是目录条目顺序,不受您的控制。要获得特定顺序,您需要在表格中收集来自 fs.dir 的全部输出并对其进行排序(或使用 scandir 和排序函数,但我不知道 luafilesystem 公开了 scandir)。
    猜你喜欢
    • 2013-08-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多