0

我正在摆弄我在一些论坛上找到的一些代码,但我只学过 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] 应该是项目名称。我想排除一个名为“blahblah”的项目,但我不明白 Lua 的布尔操作数。

在 Java 中,这将类似于

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

我在 Lua 中看到他们使用“and”和“or”,但我怎么说“and not this”?

4

2 回答 2

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
于 2014-12-07T15:47:26.827 回答
2

如果 Lua 类似地处理数组,则 t[0] 应该是项目名称。

请注意,Lua 索引表从索引 1 开始,而不是像其他一些语言那样从 0 开始,所以如果你有 table local t = {"John", "Laura", "Herb"},那么t[1] == "John"and 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 编程部分

于 2014-12-05T17:16:40.770 回答