在我的示例中如何实现luaoop?
我试图在Lua中创建一个类,其中包含关于这个类的追随者的信息,我还想让这个类了解他的追随者 但是我的代码失败了,我不知道为什么 错误是 lua:OOP.lua:90:尝试调用方法“getName”(一个nil值)在我的示例中如何实现luaoop?,oop,lua,Oop,Lua,我试图在Lua中创建一个类,其中包含关于这个类的追随者的信息,我还想让这个类了解他的追随者 但是我的代码失败了,我不知道为什么 错误是 lua:OOP.lua:90:尝试调用方法“getName”(一个nil值) car1是在car2之后。鉴于,后来;您正在尝试访问car1的leader,它当然返回nil。因此出现了错误 print( "Follower of "..car1:getName().." is "..car1:getFollower():getName() ) 问题在于您的测试代
car1
是在car2
之后。鉴于,后来;您正在尝试访问car1
的leader,它当然返回nil
。因此出现了错误
print( "Follower of "..car1:getName().." is "..car1:getFollower():getName() )
问题在于您的测试代码中,从我所看到的:
print ("Leader of " .. car1:getName() .. " is " .. car1:getLeader():getName())
car1
未定义引线。(您执行了car2:follow(car1)
)
一些建议:
- 您需要在创建方法中定义字段表。这还不适用于你的代码,但你可以说你想做排。您可以执行类似于
——这会将坦克2添加到车辆的排表中,并与每辆车辆共享。如果您在新方法中定义它:Vehicle.platoon={};坦克1.排[Tank2]=true
,则它对每辆车都是唯一的函数newVehicle(…)tbl.platon={}。。。结束
- 不要使用访问器(get*,set*)方法,除非您有充分的理由使用它们。它们增加了混乱,并且不利于性能。使用它们的一个很好的理由是,如果您正在访问访问器方法中的表,并且希望简化与该表的交互。(即
Obj:addChild(Obj2)
),但它可能不再符合访问器的资格:)Obj:hasChild(Obj2)
- 可以对未设置的字段使用虚拟对象。这将防止出现类似您的错误:
local Dummy = newVehicle("None", "None") Vehicle.follower = Dummy Vehicle.leader = Dummy
--------------
Mazda
Harley
-- setted leader! --
Leader of Mazda is None
这个错误分散了你的注意力,我以前也遇到过。也要非常小心
\u索引中的表,因为它们是引用:)
print ("Leader of " .. car1:getName() .. " is " .. car1:getLeader():getName())
local Dummy = newVehicle("None", "None")
Vehicle.follower = Dummy
Vehicle.leader = Dummy
--------------
Mazda
Harley
-- setted leader! --
Leader of Mazda is None