Lua 尝试调用 nil。

我有这样一个 Lua 脚本:

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

    for i=1, #machines do   -- RC 坦克
        --------------------------------------------
        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
                    -- 不显示空坦克
                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 初学者,这不是我的脚本,而是一个可自由使用的脚本,我不知道如何修复它。

编辑

因此,在我添加 split 部分之前,该脚本的结果应该是:

enter image description here

问题是我想将名称(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"),这给我带来了错误:http://puu.sh/a51QI/a848facf1b.png

点赞
用户1514861
用户1514861

无论是 split 函数不存在还是 marikcomma 函数不存在。

编辑:

我想您要做的是获取点之前的所有内容,而不是完整的名称,对吗?

如果是这样,您可以这样做:

将这些行替换为:

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

使用以下内容替换:

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

你不需要用 split。这个函数是模式匹配,在这种情况下,它匹配到第一个点之前的所有内容。

2014-07-10 11:47:04
用户2424975
用户2424975

我不认为 lua 有内置的 split 函数,需要自己定义。既然你说这个脚本来自外部源,他们可能在别处定义了它。

尝试阅读这个页面以获取一些想法:http://lua-users.org/wiki/SplitJoin

如果确实定义了 split 函数,则唯一的其他可能性是 comma 函数未定义,在这种情况下,你需要在 marik 内部定义它。

2014-07-10 11:50:51