1. ホーム
  2. lua

[解決済み] Lua が nil を呼び出そうとした

2022-02-19 22:01:20

質問

私はこのLuaスクリプトを持っています。

function dispTanks()
    mon.setCursorPos(offsetPos, 1)
    mon2.setCursorPos(offsetPos,1)

    for i=1, #machines do   -- RC Tanks
        --------------------------------------------
        if string.find(machines[i], "rcirontankvalvetile")
           or
           string.find(machines[i], "rcsteeltankvalvetile") then                        
            if peripheral.isPresent(machines[i]) then
                periph = peripheral.wrap(machines[i])

                fluidRaw, fluidName, fluidAmount, fluidCapacity, fluidID = marik.getTank(periph)                            

                if fluidName == nil then
                    -- does not display empty tanks
                elseif fluidName ~= nil then
                    mon2.setTextColor(tc)
                    x,y = mon2.getCursorPos()
                        mon2.setCursorPos(offsetPos, (y+1))
                        mon2.clearLine()
                    -- marik.cString(offsetPos,(y+1), tc, right, " ")
                    nameFL = split(marik.comma(fluidName), " ")
                    nameFL = nameFL[0]
                    mon2.write("Tank (" .. nameFL .. ") :  " .. marik.getBuckets(fluidAmount) .. " buckets") 
                end
             end
         end
     end
end

今度はこの行でエラーになります。

nameFL = split(marik.comma(fluidName), " ")

というエラーが発生します。 attempt to call nil .

さて、私はLuaの初心者で、これは私のスクリプトではなく、無料で使用できるスクリプトで、これを修正する方法が全く分かりません。

EDIT

つまり、分割部分を追加する前は、このスクリプトが与えるべき結果だったのです。

問題は、名前( ardite.molten )をArditeに変更したかったのと、友人がsplitを使う必要があると言ったので、以下を追加したことです:

function firstToUpper(str)
    return (str:gsub("^%l", string.upper))
end

そして

nameFL = split(fluidName, " ")
nameFL = nameFL[0]

そして、変更された: mon2.write("Tank (" .. marik.comma(fluidName) .. ") : " .. marik.comma(fluidAmount) .. " / " .. marik.comma(fluidCapacity) .. " mb (" .. marik.getBuckets(fluidAmount) .. " buckets)") を : mon2.write("Tank (" .. nameFL .. ") : " .. marik.getBuckets(fluidAmount) .. " buckets")

というエラーが発生します。

どうすればいいですか?

いずれかの split 関数が存在しないか comma の関数を使用します。 marik

EDITです。

あなたがやろうとしていることは、フルネームではなく、ドットの前のすべてを取得することだと思うのですが?

その場合、こうすればいい。

以下の行を置き換えます。

nameFL = split(marik.comma(fluidName), " ")
nameFL = nameFL[0]

をこれを使って

nameFL = marik.comma(fluidName):match("[^.]*")

これはパターン・マッチで、この場合、最初のドットまでのすべてにマッチします。