MediaWiki上的Lua错误

我正在尝试设置MediaWiki,并尝试使用NavBox模板.我在本地计算机上运行正常,但是当我将它全部复制到服务器时,我得到了Lua脚本错误,特别是:
Lua error at line 302: attempt to call field 'attr' (a nil value).
Backtrace:
(tail call): ?
Module:NavBox:302: in function "renderMainTable"
Module:NavBox:348: in function "renderMainTable"
(tail call): ?
mw.lua:425: ?
(tail call): ?
[C]: in function "xpcall"
MWServer.lua:73: in function "handleCall"
MWServer.lua:266: in function "dispatch"
MWServer.lua:33: in function "execute"
mw_main.lua:7: in main chunk
[C]: ?

如果我编辑该文件,那么它只会给所有其他字段带来错误.

我的服务器正在运行MediaWiki 1.20,如果这有所不同.我尝试过使用Scribunto 1.20,1.21和master(对引擎进行更改以适应1.20).

如果有人可以提供帮助,那就太好了.

编辑模块:Navbox,HtmlBuilder.

解决方法

与维基百科的代码相比,在您的粘贴代码中非常仔细地查看.事实上,我建议执行两者的差异.

Your code

Metatable._index = function(t,key)
    local ret = rawget(t,key)
    if ret then
        return ret
    end

    ret = Metatable[key]
    if type(ret) == 'function' then
        return function(...)
            return ret(t,...)
        end
    else
        return ret
    end
end

Wikipedia

Metatable.__index = function(t,key)
    if ret then
        return ret
    end

    ret = Metatable[key]
    if type(ret) == 'function' then
        return function(...) 
            return ret(t,...) 
        end 
    else
        return ret
    end
end

你看得到差别吗? Metamethods in Lua始终以两个下划线__开头,而不是一个.我不确定你的代码是如何进入它所处的状态的,但这很好地解释了你所遇到的所有麻烦,甚至为什么attr无法访问.这是由于Metatable的__index领域缺少一个下划线,这当然意味着它根本不会被识别.我很惊讶我发现,因为在略读时很容易错过额外的下划线.

我建议先将HtmlBuilder模块恢复到原始状态,然后查看是否能解决问题.您可能想要恢复NavBox以及您可能已修改的任何其他内容,如果您的修改不是太重要,但diff肯定会告诉您版本之间有什么不同.

请注意你未来的变化,但只要你有备份就不要害怕尝试!

相关文章

1.进入lua官网http://www.lua.org/ 2.点击download 3.点击get a binary 4.点击[Lua - joedf's ...
    Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值一样(只不过函数类型...
    并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制。大致上...
    Lua5.0的语法非常简洁,这从参考手册中的语法定义的规模(转换成标准BNF形式大概有100个左右的产...
LUA脚本文档中文翻译(基础)   介绍   Lua读作“鹿啊”,是一种据创作者说的类Pascal脚本语言。巴西...
1. 函数的使用 以下程序演示了如何在Lua中使用函数, 及局部变量 例e02.lua -- functions function pyth...