2014-12-05 88 views
0

我在摆弄一些我在某些论坛上找到的代码,但我只学过Java,所以我有点失去了我的元素。这里是我玩的片段:Lua和3条要求“if”语句

/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 

我和Lua看到,他们使用“与”和“或”线的东西,但我怎么说“而不是这个?”

+2

否定是'not'。不平等是'〜='。 – 2014-12-05 16:07:57

+0

我会如何使用这些?在这种情况下,“不”与“和”在同一位置使用否定参数? 有了不等式,我假设只要两个比较数字不同,它就会返回true。 – formn 2014-12-05 16:25:35

+5

'和','或','not'分别等同于类似C的语言(如Java)中的'&&','||'和'!'你几乎以完全相同的方式使用它们。 – 2014-12-05 16:27:54

回答

2

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

注意的Lua索引的表从指数1,而不是0像其他一些语言开始,所以如果你有表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

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 
+0

不需要'do ... end'。 – lhf 2014-12-20 01:09:30

+0

对我而言,这是一种习惯,但是,这不是必需的 – 2014-12-21 06:09:00