gpt4 book ai didi

Lua 表从 API 到主程序不可见

转载 作者:行者123 更新时间:2023-12-04 16:47:14 27 4
gpt4 key购买 nike

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

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

最佳答案

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

马里克.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

main.lua

require'marik'

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

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

解决这个问题的一种方法是使用不同的模块模式,例如这个。

马里克.lua

local M = {}

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

return M

main.lua

local marik = require'marik'

-- ...

如果你仔细阅读,你很快就会发现有 at least a couple ways在 Lua 中制作模块。

关于Lua 表从 API 到主程序不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20175971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com