这段代码是我使用自己的函数创建的名为“ 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来制作模块。