2016-09-04 145 views
2

我想在调试模式下使用一个非常简单的lua脚本,并检查ARGV。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 

我能[1]程序中访问ARGV的值,它工作正常。但是当我尝试打印时,它说'没有这样的变量'。因此,它似乎不是一个lua表或数组。当我打印ARGV代替ARGV [1],我得到以下输出

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

所以,这是调试器的限制,还是我做错了?

回答

2

你没有做错什么。

和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中的所有元素。