Lua:如果没有价值,那么在表格中创造价值 - 我缺少什么?

Jos*_*osh 0 lua lua-table

我有,我已经花了几个小时,试图找出问题,但由于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
Run Code Online (Sandbox Code Playgroud)

当它运行时,我得到一个错误,试图连接数据库打印的零值(v).一切看起来都是正确的,或者我认为.我错过了一些完全明显的东西吗 谢谢!

kik*_*ito 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
Run Code Online (Sandbox Code Playgroud)

如果你不需要调试打印,这里是一个更简单的版本,完全没有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
Run Code Online (Sandbox Code Playgroud)

variable = variable or defaultValue是Lua中非常常见的习语,你会经常看到它.

  • 好答案.一个小小的注意事项:如果你有信心并希望包含调试版,你可以这样做:`spikeRates [itemSpiked] = spikeRates [itemSpiked]或print("这是你第一次加注"..itemSpiked .." !")或{}`.如果你感到困惑,请忽略这一点. (2认同)