这段代码是我使用自己的函数创建的名为“ marik”的api中的函数。我在主程序中使用marik.pLoad()调用了该函数。如果在主程序中使用该代码,则该代码有效,因此,代码本身不是问题。一旦将其移至API(已加载了许多其他使用的函数)然后调用了该函数,主程序就不了解machines{}。它不是本地的,所以我不知道为什么它不可见。

API代码:

function pLoad()
machines = peripheral.getNames() -- load a list of peripherals into a table
table.sort(machines) -- so it displays in non-random manner
end


主程序代码:

marik.pLoad()
for i=1, #machines do
-- the rest is omitted


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

for i=1, #machines do

最佳答案

我想我知道现在发生了什么。我假设您有两个文件,类似这样。

marik.lua

module(..., package.seeall)

function pLoad()
    machines = peripheral.getNames() -- load a list of peripherals into a table
    table.sort(machines) -- so it displays in non-random manner
end


主lua

require'marik'

marik.pLoad()
for i=1, #machines do -- error here




因此,问题在于,由于marik在模块中,因此不会访问main全局表。相反,它将访问自己的全局表,该表恰好是marik。您可能会在machines下找到marik.machines

解决此问题的一种方法是使用其他模块模式,例如这样。

marik.lua

local M = {}

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

return M


主lua

local marik = require'marik'

-- ...




如果您四处阅读,您很快就会发现在Lua中有at least a couple ways来制作模块。

09-15 18:57