2016-09-04 143 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中的所有元素。