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

时间:2011-01-12 14:03:13

标签: types lua lua-table metatable

我正在调用Lord of the Rings Online(LOTRO)Beta Lua脚本功能中的API函数。 API方法返回一个名为ClassAttributes的“类型”,它将在给定的类属性“类型”上。我说“类型”是因为当我在返回值上调用type()时,它会说它是一个表。

我有办法检查类型或metatable类型吗? e.g:

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

这是输出:

  

播放器:的getclass():24个
  Turbine.Gameplay.Class.Captain:24个
  你在扮演船长

2 个答案:

答案 0 :(得分:3)

如果您有这些值的可能元表的列表,您可以使用getmetatable(obj) function获取其元表,并将它们与您已有的元数据进行比较。无法访问LOTRO API,我无法详细说明这个主题:我在哪里可以阅读它?

当然,假设GetClassAttributes()函数返回的表具有自身的元表,并且可以区分它的metatable和其他类的属性表。

答案 1 :(得分:3)

API文档有点令人困惑,虽然我想我找到了你想要的东西。 以下代码应告诉您玩家是否是队长:

local player = Turbine.Gameplay.Player
if (player:GetClass() == Turbine.Gameplay.Class.Captain) then
    print("You are playing a captain")
end

Captain是Gameplay.Class表的成员,该表只是从文档中读取的整数。

注意:您不需要使用“;”结束Lua句子。

无法测试。希望它有效。