我正在使用一个图形库,可以让你在Lua中编程.我需要A*寻路库,所以我在网上找到了一个.它只是一个lua文件,它执行路径查找和一个示例文件.在示例文件中,它使用如下对象:
-- Loading the library
local Astar = require 'Astar'
Astar(map,1) -- Inits the library, sets the OBST_VALUE to 1
Run Code Online (Sandbox Code Playgroud)
我运行脚本,一切正常.所以现在我将Astar.lua文件添加到我的图形引擎运行的路径位置并执行相同的操作,我在Astar(map,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
Run Code Online (Sandbox Code Playgroud)
所以请注意,当我从我的图形引擎运行它时它返回1,但是当它从它附带的示例运行时它返回一个表,这应该返回它.所以不确定为什么它只会返回1.
Stu*_*ley 12
package.loaded对于示例脚本,Astar如何添加到表中,而不是代码?
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.'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正在加载脚本).