Lua表从API到主程序不可见。

这段代码是我使用自己编写的函数创建的名为 "marik" 的 API 中的一个函数。我在主程序中使用 marik.pLoad() 调用该函数。如果在主程序中使用该代码,则代码本身没有问题。但是,一旦将其移动到已加载许多其他函数的 API 中并调用该函数,则主程序将不知道 machines{}。它不是本地的,因此我不知道为什么它不可见。

API 代码:

function pLoad()
machines = peripheral.getNames() -- 将外围设备的列表加载到表格中
table.sort(machines) -- 以非随机方式显示
end

主程序代码:

marik.pLoad()
for i=1, #machines do
-- 其余部分被省略

错误:从此行尝试获取 nil 的长度:

for i=1, #machines do
点赞
用户828255
用户828255

我现在认为我知道问题出在哪里了。我猜你有两个文件,像这样子的。

marik.lua

module(..., package.seeall)

function pLoad()
    machines = peripheral.getNames() -- 把周边设备列表加载到表里
    table.sort(machines) -- 以非随机的方式排序
end

main.lua

require'marik'

marik.pLoad()
for i=1, #machines do -- 这里有个错误

问题出在 marik 在一个模块中,所以它不会访问你的 main 全局表。相反,它会访问它自己的全局表,也就是 marik。你可能会发现 machinesmarik.machines 里面。

你可以通过使用另一种模块模式来解决这个问题,比如这个。

marik.lua

local M = {}

function M.pLoad()
    -- ...
end

return M

main.lua

local marik = require'marik'

-- ...

如果你看看周围,你很快就会发现 Lua 中至少有几种方法来创建模块。

2013-11-24 15:25:36