你能比较Lua中的“类型”表或元表吗?

我正在LOTRO Beta Lua scripting中调用一个API函数。API方法返回一个称为“ClassAttributes”的“类型”,它将是给定Class Attribute“类型”之一。我说“类型”,因为当我在返回值上调用type()时,它说是一个表。

有一种方法让我检查类型或元表类型吗?例如:

local returnedTable = player:GetClassAttributes();

if (returnedTable.Name == "CaptainClassAttributes")
    print("You are playing a captain");
end

更新 以下是我使用的代码:

player = Turbine.Gameplay.LocalPlayer.GetInstance();

Turbine.Shell.WriteLine("player:GetClass():" .. player:GetClass());
Turbine.Shell.WriteLine("Turbine.Gameplay.Class.Captain:" .. Turbine.Gameplay.Class.Captain);

if (player:GetClass() == Turbine.Gameplay.Class.Captain) then
    Turbine.Shell.WriteLine("You are playing a captain");
end

以下是输出:

player:GetClass():24

Turbine.Gameplay.Class.Captain:24

You are playing a captain

原文链接 https://stackoverflow.com/questions/4669640

点赞
stackoverflow用户538580
stackoverflow用户538580

如果你有一个这些值可能拥有的元表的列表,你可以使用getmetatable(obj)函数获取它们的元表并将它们与你已经拥有的元表进行比较。由于我无法访问LOTRO API,我不能对这个主题做更多的说明:我可以在哪里阅读相应信息?

当然,这前提是GetClassAttributes()函数返回的表具有自己的元表,并且可以区分它的元表和其他类属性表。

2011-01-12 14:29:58
stackoverflow用户577155
stackoverflow用户577155

API文档有点混乱,虽然我想我找到了你要找的东西。 下面的代码可以告诉你玩家是否是船长:

local player = Turbine.Gameplay.Player
if (player:GetClass() == Turbine.Gameplay.Class.Captain) then
    print("你正在扮演一位船长")
end

船长是Gameplay.Class表的成员,该表中只有一个整数,根据文档中的说明。

注:你不需要在Lua句子末尾添加“;”。

无法测试。希望它能正常工作。

2011-01-16 00:22:28