main.lua
local physics = require("physics")
local actor = require("actor")
physics.start()
//here physic is not nil
local a = Actor.new(200, 200, physics)
actor.lua
function Actor:new(x, y, physic)
//here physic is nil
end
为什么我不能将物理对象传递到另一个模块?
答案 0 :(得分:1)
在Lua中,在表中定义函数时必须小心:使用.
还是:
。在actor.lua
中,您定义了Actor:new(x,y,phys)
,这意味着self
正文中有一个隐含的Actor:new
参数;此self
将引用包含Actor
表,并且是Actor:new
调用中的第一个参数。在main.lua
中,您拨打Actor.new(200, 200, physics)
:请注意点而不是冒号,因此第一个参数为200,表示self
为200,x
为200,{{ 1}}将为y
,而physics
将为零。您应该将呼叫更改为phys
或new
的定义,其中一个或另一个。例如,在new
:
main.lua
另请注意,如果您的local a = Actor:new(200, 200, physics)
未返回任何内容,则actor.lua
中的local actor
将为main.lua
。看起来您可能将nil
表定义为全局,因此您可以在Actor
中引用它。