我有一个问题,我花了好几个小时试图弄清楚,但由于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
当它运行时,我收到一个错误,即尝试连接数据库打印的零值(v)。一切看起来都是正确的,或者我认为。我错过了一些完全明显的东西吗谢谢!
答案 0 :(得分: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
如果您不需要调试打印,这里是一个更简单的版本,完全没有ifs:
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中非常常见的习语,你会经常看到它。