Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lua如何工作_Lua_Require - Fatal编程技术网

lua如何工作

lua如何工作,lua,require,Lua,Require,我正在使用一个图形库,它可以让你在Lua中编程。我需要a*寻路库,所以我在网上找到了一个。只有一个lua文件进行路径查找,还有一个示例文件。在示例文件中,它使用如下对象: -- Loading the library local Astar = require 'Astar' Astar(map,1) -- Inits the library, sets the OBST_VALUE to 1 我运行脚本,一切正常。因此,现在我将Astar.lua文件添加到图形引擎运行的路径位置,并执行相同的

我正在使用一个图形库,它可以让你在Lua中编程。我需要a*寻路库,所以我在网上找到了一个。只有一个lua文件进行路径查找,还有一个示例文件。在示例文件中,它使用如下对象:

-- Loading the library
local Astar = require 'Astar'
Astar(map,1) -- Inits the library, sets the OBST_VALUE to 1
我运行脚本,一切正常。因此,现在我将Astar.lua文件添加到图形引擎运行的路径位置,并执行相同的操作,结果在Astar(map,1)行中出现错误:

“尝试调用本地'AStar'(数字值)

当我做与这个AStar库附带的示例相同的事情时,你知道为什么会出现这个错误吗

下面是AStar文件的一小部分

-- The Astar class
local Astar = {}
setmetatable(Astar, {__call = function(self,...) return self:init(...) end})
Astar.__index = Astar

-- Loads the map, sets the unwalkable value, inits pathfinding
function Astar:init(map,obstvalue)
    self.map = map
        self.OBST_VALUE = obstvalue or 1
    self.cList = {}
    self.oList = {}
    self.initialNode = false
    self.finalNode = false
    self.currentNode = false
    self.path = {}
    self.mapSizeX = #self.map[1]
    self.mapSizeY = #self.map
end

所以请注意,当我从图形引擎运行它时,它返回1,但当从它附带的示例运行时,它返回一个表,这是它应该返回的。所以不确定为什么它只返回1。

您需要在
Astar.lua
的末尾添加
return Astar
如何添加Astar到示例脚本的
package.loaded
表,与您的代码相对

快速LUA语法回顾:

  • func'string'
    相当于
    func('string')
  • tabl.ident
    等同于
    tabl['ident']
当您使用
require('Astar')
运行脚本时,它就是这样做的:

  • 检查
    package.loaded['Astar']
    是否为非零值。
    • 如果是,则返回此值。否则,将继续此列表
  • 运行
    package.path
    (和
    package.cpath
    )中列出的模式的文件名,并将“?”替换为“Astar”,直到找到与模式匹配的第一个文件
  • package.loaded['Astar']
    设置为
    true
  • 'Astar'
    作为参数运行模块脚本(通过上面的路径搜索找到-在本例中,我们假设它不是C模块)(在模块脚本中可作为
    ..
    访问)
  • 如果脚本返回一个值,则将该值放入
    包中。加载['Astar']
  • 返回已加载的['Astar']包的内容。
    • 请注意,脚本可以将包加载到
      package.loaded['Astar']
      中作为其执行的一部分,并且不返回任何内容

正如有人在上面的评论中指出的,您的问题可能来自使用“AStar”而不是“AStar”加载模块。Lua可能是使用此字符串加载此脚本(因为在不区分大小写的窗口中,搜索名为“AStar.Lua”的文件将打开名为“AStar.Lua”的文件),但脚本没有使用该字符串操作(通过使用硬编码的
“Astar”
而不是
“Astar”
Lua正在加载下面的脚本)。

我注意到错误消息
“尝试调用本地“Astar”(数字值)
,S是大写的。这是您的输入错误还是您可能在某处使用了错误的大写?