(glua)如何检查表格中是否有var?

时间:2017-06-13 04:01:46

标签: lua lua-table

在我的情况下,

self.targets = {}
for k,v in pairs(ents.findInSphere(self:GetPos()) do
-- here, how to check if not v in self.targets?
table.insert(self.targets,v)

我试过这个

for o, p in pairs(self.targets) do
if v ~= p then

另一个

if not self.targets[v]

有人可以帮助我吗?

我希望检查self.targets中是否不是v

但我不能用这个

for o, p in pairs(self.targets) do
if v == p then continue end

因为继续不支持 而且也不支持

2 个答案:

答案 0 :(得分:0)

如果if v ~= p返回新构建的坐标集,则检查if not self.targets[v]ents.findInSphere()将失败。

您会看到,当您将两个对象与==~=进行比较时,您没有比较其内容,只会检查这是否与对象的实例完全相同。这更像是比较C / C ++中的指针。 如果您从.findInSphere()收到的坐标对象未实现eq元方法,则您必须自己比较坐标。根据坐标实现,它可能类似于:

if v[1] == p[1] and v[2] == p[2] then -- ...
-- or
if v.x == p.x and v.y == p.y then -- ...
-- or
if v.equals(p) then -- ..

比较两个坐标对象所需的确切代码取决于该坐标的实现。

注意到'glua'标签。如果那是garry的mod,那么ents.FindInSphere()会返回实体,而不是坐标。检查if not self.targets[v]应该可以正常工作。

答案 1 :(得分:0)

从我所看到的,您尝试将所有新发现的目标追加到self.targets

因此,我们可以使用像...这样的结构来实现这一点。

self.targets = {}
for k,v in pairs(ents.findInSphere(self:GetPos())) do
    if not table.HasValue(self.targets, v) then
        self.targets[#self.targets+1] = v
    end
end

Glua默认内置table.HasValue,请参阅The Docs。 在这种情况下,我们只是想要逻辑而不是这个。