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ロジックは少し混乱しているようです。次のように、2つの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 に答える