我在调试模式下尝试一个非常简单的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"}
那么,这是调试器的限制,还是我做错了?
答案 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
中的所有元素。