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