redis lua debugger -- 为什么我不能打印ARGV

我正在尝试在调试模式下运行一个非常简单的lua脚本,以检查ARGV。

local jobExists = redis.call('exists', ARGV[1])
if jobExists then
  return false
end

然后,我以以下方式运行调试器:

redis-cli --ldb --eval ./is_running.lua 0 , user:root

我能够在程序中访问ARGV [1]的值并且它工作得很好。但是当我尝试打印它时,会显示“no such variable”。

lua debugger> print ARGV[1]
No such variable.
lua debugger>

所以,它似乎不是一个lua表或数组。当我打印ARGV而不是ARGV [1]时,我得到以下输出结果

lua debugger> print ARGV
<value> {"user:root"}

那么,这是调试器的限制,还是我的错误?

点赞
用户5384363
用户5384363

你没有做错任何事情。

使用 lua 调试器,你只能打印整个 table 的值(实际上,ARGV 是一个 lua table),而不能仅打印 table 中的一个元素。

当你在调试器中键入以下命令时:

print varname

Redis 会搜索 lua 变量,查找是否有名称为 varname 的变量。如果找到一个,Redis 就会打印该变量的值。然而,如果没有找到这个变量,它就会打印“没有这样的变量”。

在你的情况下,print ARGV[1] 让 Redis 尝试查找一个名称为 ARGV[1] 的变量,但却没有这样的变量,即 strcmp("ARGV[1]", "ARGV") != 0。因此,你会得到“没有这样的变量”的信息。

另一方面,使用 print ARGV,Redis 可以找到一个全局变量,其名称正好是 _ARGV_。因此,它会打印该变量的值:table 中的所有元素。

2016-09-04 13:05:19