0

我有一个问题,我花了几个小时试图弄清楚,但由于 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) 以打印数据库。一切看起来都是正确的,或者我是这么认为的。我错过了一些完全明显的东西吗?谢谢!

4

1 回答 1

5

if-else 逻辑似乎有点混乱。尝试将其分成两个 if,如下所示:

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

如果您不需要调试打印,这里有一个更简单的版本,根本没有 if:

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 中一个很常见的习语,你会经常看到。

于 2012-01-06T09:56:47.510 回答