1

私はコンピュータ クラフト (マインクラフト) でプログラミングを学んでおり、一部のストレージ セルの読み取りに問題があります。

私が取り組んでいる関数は、すべてのセルを通過し、for ループ内の変数にストレージ容量を合計します。

これは私がこれまでに得たものです

local cell1 = peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_2")
local cell2 = peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_3")
local cell3 = peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_4")
local cell4 = peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_5")
local cell5 = peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_6")
local cell6 = peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_7")

cells = {"cell1", "cell2", "cell3", "cell4", "cell5", "cell6"}

local totStorage

function getTotStorage(table)
    for key = 1,6 do
        x = table[key]
        totStorage = totStorage + x.getMaxEnergyStored()        
    end
    print(totStorage)
end

この行でエラーが発生します

totStorage = totStorage + x.getMaxEnergyStored()    

「nilに電話しよう」と言っています。助言がありますか?

4

1 に答える 1

1
cells = {"cell1", "cell2", "cell3", "cell4", "cell5", "cell6"}

次の省略形です。

cells = {
-- key   value
   [1] = "cell1", 
   [2] = "cell2", 
   [3] = "cell3", 
   [4] = "cell4", 
   [5] = "cell5", 
   [6] = "cell6"
}

getTotStorageあなたの呼び出しが以下に似ていると仮定します(あなたは投稿しませんでした)

getTotStorage(cells)

xループでは、文字列値であるメソッドを呼び出そうとします:

for key = 1,6 do
   x = table[key]
   totStorage = totStorage + x.getMaxEnergyStored()        
end

これは本質的にやろうとしています:

totStorage = totStorage + ("cell1").getMaxEnergyStored()

できることは、値が によって返されるオブジェクトになるようにコードを再配置することですperipheral.wrap

local cells = {
  peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_2"),
  peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_3"),
  peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_4"),
  peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_5"),
  peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_6"),
  peripheral.wrap("tile_thermalexpansion_cell_reinforced_name_7"),
}

function getTotStorage(t)
  local totStorage = 0
  for i,v in ipairs(t) do
     totStorage = totStorage + v.getMaxEnergyStored()
  end
  print(totStorage)
end

いくつかの観察:

  • local変数のスコープを制限できる場合 (つまり) に使用します (totStorageループカウンターをグローバルとして持つ必要はありません)。
  • 標準の Lua ライブラリと競合する変数に名前を付けないでください (つまりstringtablemath)
  • ipairsシーケンスをループするより良い方法です
于 2015-04-10T18:13:05.280 に答える