在Lua中重写assert函数。

我的设置板使用lighttpd提供板的Web UI。 它使用lua和JS绘制逻辑。

我看到的是,如果我将URL输入为“IPofboard / somejunkhere”,它将正确地抛出“404未找到”。 但是当我发出“IPofboard / somejunk.lp”(它是一些无关紧要的lua文件)时,它会产生一个“断言”错误,表示未找到文件。这就是lua的工作方式。

但是我想修改/覆盖此断言,以显示与“404未找到”相同的自定义消息。 有什么想法吗?

我刚接触lua。这可行吗?

点赞
用户107090
用户107090

我不熟悉 lighttpd 如何嵌入 Lua,但是在 Lua 中你可以重新定义任何东西,包括标准 Lua 库中的函数,比如 assert

2014-03-11 13:14:22
用户869951
用户869951

如lhf所述,在Lua中重新定义任何函数都非常简单,但我认为这可能不是你需要的。问题在于,当你这样做后

local origAssert = assert
assert = function(message)
    do something (possibly using origAssert)
end

然后使用assert的每个函数调用将使用你的新assert函数,这可能不是你想要的。相反,你可以在“受保护”模式下调用函数:这将将断言作为错误消息捕获,然后你可以决定该怎么做。例如,

ok, ret1, ret2 = pcall(yourFunction, arg1)
if not ok then
    do something, possibly print ret1 (the error message)
end

如果你要求一个执行一些初始化的模块,也是同样的情况:

ok, module = pcall(require, yourModuleName)
if not ok then
    print("ERROR:", module) -- 如果不ok,那么module就是错误消息
end
2014-03-13 02:13:11