Function Lua:第一次调用函数或VM启动/启动检查

Function Lua:第一次调用函数或VM启动/启动检查,function,logging,lua,call,init,Function,Logging,Lua,Call,Init,我想知道是否有一种方法可以检查函数之前是否至少被调用过一次,或者是否有第一次调用该函数(通过任何方法),或者是否有一种方法可以检查Lua VM或应用程序是否刚刚启动/启动……首选前者。然后检查应用程序/Lua虚拟机是否正在关闭,并进行快速的最后调用 这是我的函数 function __Error(error) local error_log = io.open("Logs/Error.log", "a+") local log_time_date = os.date("Error

我想知道是否有一种方法可以检查函数之前是否至少被调用过一次,或者是否有第一次调用该函数(通过任何方法),或者是否有一种方法可以检查Lua VM或应用程序是否刚刚启动/启动……首选前者。然后检查应用程序/Lua虚拟机是否正在关闭,并进行快速的最后调用

这是我的函数

function __Error(error)
    local error_log = io.open("Logs/Error.log", "a+")
    local log_time_date = os.date("Error Log: %A, %B %d %Y %I" .. ":" .. "%M" .. ":" .. "%S %p")
    local errors = "-----\n" .. log_time_date .. "\n\n" .. error .. "\n"
    error_log:write(errors)
    error_log:close()
end
__Error("This is an error")
它是一个错误记录函数,将在多个脚本、函数、类等中使用,这些脚本、函数、类将所有错误记录到单个文件中。我想做的事情是让time_数据只在这个函数的第一次调用时出现,因为在那之后它就不需要了,而且看起来很糟糕。那么有没有一种方法可以用这个函数来实现呢?如果可能的话,我不希望更改发送给它的参数和日期时间变量

谢谢

使用闭包:

do
    local first = true -- __Error can access/modify this, and it will persist across calls
    local error_log -- Same here

    function __Error(error)
        if first then
            -- Repeatedly opening/closing the log file is bad for performance, just open it once and keep it open.
            -- Also, don't need + in the file mode if you're not reading.
            error_log = io.open("Logs/Error.log", "a")
            local log_time_date = os.date("Error Log: %A, %B %d %Y %I" .. ":" .. "%M" .. ":" .. "%S %p")
            local header = "-----\n" .. log_time_date .. "\n"
            error_log:write(header)
            first = false
        end

        error_log:write(error, "\n")
    end

    function __Close_error_log()
        if error_log then error_log.close() end
    end
end

__Error("This is an error")

-- at end of program
__Close_error_log()

这就是我和我朋友想出的答案。这是否有效?

看起来很可靠,我将测试它。如果我想保留以前的日志,我不需要+?我测试了它,它仍然在第二次调用时给出了时间日期。它对你有用吗?确保你没有多次创建函数。同样,如果你是
a
ppending,你不需要
+
来保存内容。根据我所看到的,函数只创建了一次。虽然闭包允许在外部脚本中调用函数,只要它在全局表中?以下是我在脚本中得到的输出…
----错误日志:2014年11月9日星期日07:37:37 PM这是一个错误------错误日志:星期日,2014年11月9日晚上7:38:10这是一个错误Hi Hi
我用Hi调用了函数两次\n,但在我调用函数的任何其他时间,时间都会打印出来。
logged_time_date = logged_time_date

function __Error(error)
    local error_log = io.open("Logs/Error.log", "a+") -- a+ is needed in case the file gets deleted
    if logged_time_date == nil then
        local log_time_date = os.date("Error Log: %A, %B %d %Y %I" .. ":" .. "%M" .. ":" .. "%S %p")
        local time_stamp = "----\n" .. log_time_date .. "\n----\n"
        error_log:write(time_stamp)
        logged_time_date = true
    end
    error_log:write(error, "\n")
end