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

(glua)如何检查表中是否没有var?,lua,lua-table,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 = {}
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]
有人能帮我吗

我希望检查自我目标中是否有v

但我不能用这个

for o, p in pairs(self.targets) do
if v == p then continue end
因为继续不支持
如果v~=p
或如果不是self,则检查
。如果
ents.findInSphere()
返回一组新构造的坐标,则目标[v]
将失败

你看,当你用
==
~=
比较两个对象时,你不是在比较它的内容,你只是检查它是否与一个对象的实例完全相同。这更像是在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()
返回实体,而不是坐标。检查
如果不是self.targets[v]
应该可以正常工作

如果v~=p
或如果不是self,则检查
。如果
ents.findInSphere()
返回一组新构造的坐标,则目标[v]
将失败

你看,当你用
==
~=
比较两个对象时,你不是在比较它的内容,你只是检查它是否与一个对象的实例完全相同。这更像是在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()
返回实体,而不是坐标。检查
如果不是self.targets[v]
应该可以正常工作

据我所见,您正在尝试将所有新找到的目标附加到
self.targets

所以,我们可以用一个像

self.targets={}
对于k,v成对(ents.findInSphere(self:GetPos())do
如果不是table.HasValue(self.targets,v),则
自我目标[#自我目标+1]=v
结束
结束
Glua默认具有
表。HasValue
内置,请参阅。
在这种情况下,我们只希望逻辑上不是这样。

从我所看到的,您试图将所有新找到的目标附加到
self.targets

所以,我们可以用一个像

self.targets={}
对于k,v成对(ents.findInSphere(self:GetPos())do
如果不是table.HasValue(self.targets,v),则
自我目标[#自我目标+1]=v
结束
结束
Glua默认具有
表。HasValue
内置,请参阅。
在这种情况下,我们只希望逻辑不是这样。

您使用的是来自第一个循环的
k
吗?您使用的是来自第一个循环的
k