Redis Lua调试器--为什么我无法打印ARGV

3

我正在调试一段非常简单的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]的值并且运行良好,但是当我尝试打印时,它会显示“没有这个变量”。
lua debugger> print ARGV[1]
No such variable.
lua debugger> 

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

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

那么,这是调试器的限制,还是我的操作有误?

1个回答

3

您没有做错任何事情。

使用lua调试器,您只能打印整个table的值(实际上,ARGV是一个lua table),不能只打印表中的项目。

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

print varname

Redis搜索lua变量以查找是否有名为varname的变量。如果找到了一个变量,Redis将打印变量的值。但是,如果没有一个名为varname的变量,则打印No such variable

在您的情况下,print ARGV[1]使Redis尝试查找一个变量,其名称恰好为ARGV[1],而没有这样一个变量,即strcmp("ARGV[1]","ARGV") != 0。因此您得到No such variable

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接