(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
?