(glua) 如何检查一个变量是否不在table中?

在我的情况下,

self.targets = {}
for k,v in pairs(ents.findInSphere(self:GetPos()) do
-- 在这里,如何检查如果self.targets中没有v?
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

因为continue不支持 而goto也不支持

点赞
用户5675002
用户5675002

ents.findInSphere()返回一组新构造的坐标时,检查if v ~= pif not self.targets [v]会失败。

你知道,当你用==~= 比较两个对象时,你并没有比较它们的内容,你只是检查它们是否确切地是同一个对象的实例。它更像是在C/C++中比较指针。 如果从.findInSphere()获取的坐标对象没有实现eq元方法,则您需要自己比较坐标。根据坐标实现的不同,它可能看起来像:

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

比较两个坐标对象所需的确切代码取决于该坐标的实现。 注意到'glua'标签。如果那是garry's mod,则ents.FindInSphere()返回实体,而不是坐标。检查if not self.targets [v]应该可以正常工作。

2017-06-13 08:32:03
用户7170955
用户7170955

从我所看到的,你正在尝试将所有新发现的目标添加到 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。 在这种情况下,我们只需要使用逻辑非。

2017-06-26 01:23:36