redis lua调试器 - 为什么我不能打印ARGV

时间:2016-09-04 11:42:31

标签: lua redis

我在调试模式下尝试一个非常简单的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 个答案:

答案 0 :(得分:3)

你没有做错任何事。

使用lua debuger,你只能打印整个table的价值(ARGV实际上是lua table),而你不能打印 table

的项目

在debuger中键入以下命令时:

print varname

Redis搜索lua变量以查找是否存在名为varname的变量。如果找到一个,Redis将打印变量的值。但是,如果没有人名为varname,则会打印无此变量

在您的情况下,print ARGV[1]让Redis尝试找到一个变量,其名称完全 ARGV [1] ,并且没有这样一个变量,即strcmp("ARGV[1]", "ARGV") != 0。所以你得到没有这样的变量

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