2012-01-06 14 views
0

我有一個問題,我花了幾個小時試圖弄清楚,但由於Lua對我來說還是比較新的,我無法弄清楚它爲什麼不起作用。Lua:如果沒有價值,那就在表格中創造價值 - 我錯過了什麼?

這是我正在嘗試做的。如果我第一次添加項目,它不會顯示在spikeRates表中,所以我需要添加它。如果我以前曾經刺過這個物品,但是從來沒有用過這個物品,那麼我需要在spikeRates [itemSpiked]表中反映出這一點。我寫的代碼如下所示,但無法填充表格。

spikeRates={} 
itemSpiked = "leather" 
mySpike = "iron" 

if not spikeRates[itemSpiked] then 
    spikeRates[itemSpiked]={} 
    spikeRates[itemSpiked][mySpike]={} 
    print("This is your first time spiking "..itemSpiked.."!") 
elseif not spikeRates[itemSpiked][mySpike] then 
    spikeRates[itemSpiked][mySpike]={Failure=0,Success=0} 
    print("This is your first time spiking "..itemSpiked.." with "..mySpike.."!") 
end 

for i,v in pairs(spikeRates) do 
    print(i .. ": " .. v) 
end 

當它運行時,出現試圖連接打印數據庫的nil值(v)的錯誤。一切都看起來正確,或者我想。我錯過了一些完全明顯的東西?謝謝!

回答

5

if-else邏輯看起來有點混亂。嘗試將其分離成兩個IFS,像這樣:

spikeRates={} 

itemSpiked = "leather" 
mySpike = "iron" 

if not spikeRates[itemSpiked] then 
    spikeRates[itemSpiked]={} 
    print("This is your first time spiking "..itemSpiked.."!") 
end 
if not spikeRates[itemSpiked][mySpike] then 
    spikeRates[itemSpiked][mySpike]={Failure=0,Success=0} 
    print("This is your first time spiking "..itemSpiked.." with "..mySpike.."!") 
end 

for i,v in pairs(spikeRates) do 
    print(i .. ": " .. v) 
end 

如果您不需要調試印刷,這裏有一個簡單的版本,沒有如果可言:

spikeRates={} 

itemSpiked = "leather" 
mySpike = "iron" 

spikeRates[itemSpiked] = spikeRates[itemSpiked] or {} 
spikeRates[itemSpiked][mySpike] = spikeRates[itemSpiked][mySpike] or {Failure=0,Success=0} 

for i,v in pairs(spikeRates) do 
    print(i .. ": " .. v) 
end 

variable = variable or defaultValue是一種很常見的在Lua的成語中,你會經常看到它。

+2

很好的答案。一個小提示:如果你感到自信並且想要包含調試打印,你可以這樣做:'spikeRates [itemSpiked] = spikeRates [itemSpiked]或者打印(「這是你第一次扣球」..itemSpiked ..「 !「)或{}'。如果你感到困惑,請忽略它。 – Deco 2012-01-06 10:49:59

+0

他,這是一個很好的德科,從來沒有想過這樣做! – jpjacobs 2012-01-06 11:43:16

+0

打印消息是絕對需要的。這是一個輸出給用戶,所以他們知道,而elseif部分的原因是,它可以輸出他們是否曾經在過去刺過該項目,如果他們有,繼續看看他們是否會用特定的秒殺刺激它。我在wxluaedit中嘗試了兩種方法,並且它試圖連接一個nil(v)值仍然返回一個錯誤。不知道是什麼問題... – Josh 2012-01-06 13:07:45