Lua:若并没有值,那个么在表中创建值——我缺少什么?

Lua:若并没有值,那个么在表中创建值——我缺少什么?,lua,lua-table,Lua,Lua Table,我有一个问题,我花了好几个小时试图弄清楚,但由于Lua对我来说还是比较新的,我不明白为什么它不起作用 这就是我要做的。如果我是第一次添加某个项目,它将不会显示在spikeRates表中,因此我需要添加它。如果我以前添加过该项目,但从未添加过我正在添加的项目,那么我需要在spikeRates[itemSpiked]表中反映这一点。我编写的代码如下,但无法填充表 spikeRates={} itemSpiked = "leather" mySpike = "iron" if not spikeRa

我有一个问题,我花了好几个小时试图弄清楚,但由于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)以打印数据库。一切看起来都是正确的,至少我是这么想的。我是不是遗漏了一些显而易见的东西?谢谢

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

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或defaultValue
是Lua中非常常见的习惯用法,您会经常看到它。

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

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或defaultValue
是Lua中非常常见的习惯用法,您会经常看到它。

回答得好。一个小提示:如果您有信心并且希望包含调试打印,您可以这样做:
spikeRates[itemspicked]=spikeRates[itemspicked]或打印(“这是您第一次使用峰值”。.itemspicked.!”)或{}
。如果你感到困惑,请忽略这个。他,这是一个很好的装饰,从来没有想过这样做!打印信息是绝对必要的。这是给用户的一个输出,让他们知道,而elseif部分的原因是,它将输出他们过去是否加过该项目,如果他们有,继续看他们是否加过该特定的峰值。我在wxluaedit中尝试了这两种方法,但它仍然返回一个错误,因为它试图连接一个nil(v)值。不确定问题是什么…事实上,它确实有效,但最终的打印似乎不起作用。由于某些原因,v未显示为有效值。知道为什么吗?编辑:这是因为它是一个表值。嗯。。。有没有简单的方法可以将表转储为:皮革:铁(0失败,0成功),钢(0失败,0成功)--等等,因为使用的钉子可能会有所不同?当然,这是我将表转储到字符串的lib:好答案。一个小提示:如果您有信心并且希望包含调试打印,您可以这样做:
spikeRates[itemspicked]=spikeRates[itemspicked]或打印(“这是您第一次使用峰值”。.itemspicked.!”)或{}
。如果你感到困惑,请忽略这个。他,这是一个很好的装饰,从来没有想过这样做!打印信息是绝对必要的。这是给用户的一个输出,让他们知道,而elseif部分的原因是,它将输出他们过去是否加过该项目,如果他们有,继续看他们是否加过该特定的峰值。我在wxluaedit中尝试了这两种方法,但它仍然返回一个错误,因为它试图连接一个nil(v)值。不确定问题是什么…事实上,它确实有效,但最终的打印似乎不起作用。由于某些原因,v未显示为有效值。知道为什么吗?编辑:这是因为它是一个表值。嗯。。。有没有简单的方法可以将表转储为:皮革:铁(0失败,0成功),钢(0失败,0成功)--等等,因为使用的钉子可能不同?当然-这是我将表转储到字符串的库: