lua怎么需要工作

时间:2011-08-01 17:24:46

标签: 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文件添加到我的图形引擎运行的路径位置并执行相同的操作,我在Astar(地图,1)行上得到错误:

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

当我做与此AStar lib附带的示例相同的事情时,为什么我会收到该错误的任何想法?

以下是一些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。

2 个答案:

答案 0 :(得分:11)

如何将Astar添加到示例脚本的package.loaded表中,而不是代码?

  

QUICK LUA SYNTACTIC SUGAR REVIEW:

     
      
  • func 'string'相当于func('string')
  •   
  • tabl.ident相当于tabl['ident']
  •   

使用require('Astar')运行脚本时,这就是它的作用:

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

正如上面评论中提到的那样,您的问题可能来自使用'A S tar'而不是'A s tar'加载模块。 Lua可能正在使用此字符串加载此脚本(因为,在不区分大小写的Windows上,搜索名为“AStar.lua”的文件将打开一个名为“Astar.lua”的文件),但脚本不是使用它进行操作(使用硬编码的"Astar"而不是"AStar" Lua正在加载脚本。)

答案 1 :(得分:5)

您需要在return Astar的末尾添加Astar.lua