尝试索引脚本中的nil值

RCI*_*CIX 6 lua

我正在尝试编写一个lua脚本来帮助修改游戏,并且它一直在我的一个助手库的某个特定行上打破.

odfWriter.lua:

require 'loopsetup'
require 'ioWriter'
local open = {}
odfWriter = class{
    writer = false
}
odfWriter[open] = false

function odfWriter:open(name)
    if not self[open] then
        self.writer = ioWriter()
        self.writer:open(name)
        self[open] = true
    else
        error("tried to open an already open writer")
    end
end

function odfWriter:write(args)
    self.writer:write(args.Key .. " = ") --<-- error is here, when trying to access args
    if args.Type == "seqstrings" then
        for k,v in pairs(args.Value) do
            self.writer:write("\"" .. v .. "\" ")
        end
    elseif args.Type == "string" then
        self.writer:write("\"" .. args.Value .. "\"")
    elseif args.Type == "seqnumbers" then
        for k,v in pairs(args.Value) do
            self.writer:write(tostring(v) .. " ")
        end
    elseif args.Type == "number" then
        self.writer:write(tostring(args.Value))
    elseif args.Type == "boolean" then
        if args.Value == true then
            self.writer:write("1")
        elseif args.Value == false then
            self.writer:write("0")
        end
    end
    self.writer:write("\n")
end
function odfWriter:close()
    if self[open] then
        self.writer:close()
        self.writer = false
        self[open] = false
    else
        error("tried to close an already closed writer")
    end
end
Run Code Online (Sandbox Code Playgroud)

loopSetup.lua

-----------------------------------------------------------------------
--  file        : loopsetup.lua
--  description : provides global access to all of the (known) members
--                of the loop.simple code (for easier access)
-----------------------------------------------------------------------
require 'loop.simple'
class = loop.simple.class
classof = loop.simple.classof
initclass = loop.simple.initclass
instanceof = loop.simple.instanceof
isclass = loop.simple.isclass
memberof = loop.simple.memberof
members = loop.simple.members
new = loop.simple.new
rawnew = loop.simple.rawnew
subclassof = loop.simple.subclassof
superclass = loop.simple.superclass
Run Code Online (Sandbox Code Playgroud)

ioWriter.lua:

local loaded = require('loopsetup')
assert(loaded, 'loopsetup not loaded')
local open = {}
ioWriter = class{
    stream = false
}
ioWriter[open] = false
function ioWriter:open(name)
    if not self[open] then
        self.stream = io.open(name, "w")
        self[open] = true
    else
        error("attempted to open an already open writer")
    end
end
function ioWriter:write(str)
    self.stream:write(str)
end
function ioWriter:writeLine(str)
    self.stream:write(str .. '\n')
end
function ioWriter:close(self)
    if self[open] then
        self.stream:flush()
        self.stream:close()
        self.stream = false
        self[open] = false
    else
        error("attempted to close an already closed writer")
    end
end
Run Code Online (Sandbox Code Playgroud)

测试代码:

require 'loopsetup'
require 'odfWriter'
local odf = odfWriter()
odf:open('test.odf')
local line1Data = {
    Type = "seqstrings",
    Key = "engineTargetHardpoints",
    Value = {"hp01", "hp02", "hp03"}
}
odf:write(line1data)
odf:close()
Run Code Online (Sandbox Code Playgroud)

当我明确地将有效表传递给odfwriter.write时,为什么会出现此错误?

uro*_*roc 5

至少在你的测试代码中,你有一个错字:

line1data ~= line1Data
Run Code Online (Sandbox Code Playgroud)

在close方法中,你在ioWriter.lua中也有一个拼写错误:

function ioWriter:close(self)
Run Code Online (Sandbox Code Playgroud)

应该

function ioWriter:close()
Run Code Online (Sandbox Code Playgroud)