Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Redis上将Nil参数传递给Lua脚本?_Lua_Redis - Fatal编程技术网

在Redis上将Nil参数传递给Lua脚本?

在Redis上将Nil参数传递给Lua脚本?,lua,redis,Lua,Redis,我有一个lua redis脚本,我想在ARGV中传递一些nil参数。我认为以下方法可行: redis-cli EVAL "$(cat some_script.lua)" 3 key1 key2 key 3 nil nil 4 在这种情况下,我希望ARGV[1]=ARGV[2]=nil。相反,在lua中,它们似乎被设置为'nil'(字符串),因此当我执行以下操作时: if ARGV[1] then return ARGV[1] end 我得到返回给我的'nil' 如何正确地将nils传递给Lu

我有一个lua redis脚本,我想在ARGV中传递一些nil参数。我认为以下方法可行:

redis-cli EVAL "$(cat some_script.lua)" 3 key1 key2 key 3 nil nil 4
在这种情况下,我希望ARGV[1]=ARGV[2]=nil。相反,在lua中,它们似乎被设置为
'nil'
(字符串),因此当我执行以下操作时:

if ARGV[1] then return ARGV[1] end
我得到返回给我的
'nil'


如何正确地将nils传递给Lua?

否,命令行参数将始终是
字符串,即使您传递的参数如下所示:

lua script.lua "test argument" "" "end"
你仍然会得到

argv[1] = "test argument"
argv[2] = ""   --empty string
argv[3] = "end"
在本例中,argv[4]=
nil
,但我认为这不是您想要的,因为程序希望在最后有一个非nil参数

因此,为什么不在脚本中设置一些标志字符串来代表
nil
,例如,使用字符串“nil”作为标志,以便在脚本中测试:

if argv[1] ~= "nil" then return argv[1] end

如果不传递任何内容,则程序内部将出现
nil
。否则,您将始终收到一个字符串。@hjpotter92是的,但问题(和示例)是关于nil参数之后是否有非nil参数。在这种情况下,对于应该为零的参数,我如何不传递任何信息?看看这个例子,这就是我现在正在做的,但是我认为必须有一种方法在中间传递零。当你想让人们使用设置为nil的变量时,没有设置它似乎真的很不正常。@Eli这样想:Lua是用C实现的,C passs
argv
作为字符串数组。如果您真的需要,也许更改Lua源代码
getargs
可以完成这项工作。