Lua和3要求"如果"声明

时间:2014-12-05 16:05:53

标签: lua operands

我正在摆弄一些我在某些论坛上发现的代码,但我只学过Java,所以我有点偏离了我的元素。这是我正在玩的片段:

/run 
function FnH() 
  for i=0,4 do 
    for j=1,GetContainerNumSlots(i) do 
      local t={GetItemInfo(GetContainerItemLink(i,j) or 0)}
      if t[7]=="Herb" and select(2,GetContainerItemInfo(i,j))>=5 then 
        return i.." "..j, t[1]
      end 
    end 
  end
end

这是使用WoW的插件API。我知道的很少,这是一个搜索并创建一个列表函数,列出让t [7] = Herb同时拥有超过5个的项目。如果Lua类似地执行数组,则t [0]应该是Item Name。我想要排除一个名为" blahblah"的项目,但我不了解Lua的布尔操作数。

在Java中,它将是

的内容
if(itemX.getItemType()=="Herb" && itemX.getAmount()>5 && itemX.getName()!="blahblah")
do stuff
else skip to next item

我看到他们使用"和"和"或",但我怎么说"而不是这个"?

2 个答案:

答案 0 :(得分:2)

  

如果Lua的数组类似,t [0]应为Item Name。

请注意,Lua将索引从索引1开始索引,而不是像其他语言一样索引,因此如果您有表local t = {"John", "Laura", "Herb"},那么t[1] == "John"t[3] == "Herb"

正如其他人所说,等效的Lua操作是andornot,不等式写为~=,因此您可以编写代码为:

if itemX.getItemType() == "Herb"
and itemX.getAmount() > 5
and itemX.getName() ~= "blahblah" then
  -- do stuff
else
  -- skip to next item
end

您还可以将最后一个条件更改为and not (itemX.getName()=="blahblah"),因为它们是等效的。

另外,我对WoW API不确定,但那些itemX调用应该是itemX:getItemType()itemX:getAmount()等等(请注意使用:表示法而不是.符号);请参阅Lua编程中的OO-programming section

答案 1 :(得分:2)

我只是将你的java代码直接翻译成Lua,你可以看看它是否对你有意义

    if itemX.getItemType() == "Herb" and itemX.getItemAmount() > 5 and itemX.getItemName ~= "blahblah" then do
        --do stuff here
    end
    else
        --skip to the next item
    end