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

当运行时,我得到一个错误,尝试连接一个空值(v)以打印数据库。一切看起来都正确,或者我以为是这样。我是否漏掉了完全明显的内容?谢谢!

原文链接 https://stackoverflow.com/questions/8753347

点赞
stackoverflow用户312586
stackoverflow用户312586

if-else 逻辑好像有些混乱。尝试将其分成两个 if,如下所示:

spikeRates={}

itemSpiked = "leather"
mySpike = "iron"

if not spikeRates[itemSpiked] then
  spikeRates[itemSpiked] = {}
  print("这是你第一次用 "..itemSpiked.." 制作道具加强剂!")
end
if not spikeRates[itemSpiked][mySpike] then
  spikeRates[itemSpiked][mySpike] = {Failure=0,Success=0}
  print("这是你第一次用 "..mySpike.." 加强 "..itemSpiked.."!")
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-06 09:56:47