Lua编程时遇到的一个错误:attempt to index upvalue

最近用OpenResty开发一个产品。新学Lua语言,写了不少脚本。前几天遇到这么一个运行时错误:

2022/01/21 18:57:01 [error] 581744#0: *74 lua entry thread aborted: runtime error: /opt/lua/blacklist.lua:98: attempt to index upvalue 'actions' (a number value)

简化一下,blacklist.lua代码如下:

local actions = require("actions")

local function do_something()
  actions.do_something() --gg
end

很奇怪。于是加了日志,发现actions这个变量确实是数字,是一个不认识的浮点数。我以为是变量被篡改了。
别的模块调用actions并没有问题啊,只有这个blacklist模块有问题。而且这样修改一下就正常:

local function do_something()
  require("actions").do_something() --good
end

但是原因没查清,不敢就这样放过。查了一个上午,没结论。
到了下午,手气来了……一眼看到actions模块中有这么一行:

local blacklist = require("blacklist")

循环引用!
作为新手的我,还真不知道Lua模块不允许循环引用啊,毕竟解释器没报错。
实际上也不是完全不允许循环引用,只是在模块顶层require的时候有这个限制。

知道原因就好办了:把两个模块中公共代码提取出来放到第三个模块,去掉上面的一个require语句就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值