在Redis上将Nil参数传递给Lua脚本?
我有一个lua redis脚本,我想在ARGV中传递一些nil参数。我认为以下方法可行:在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
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 passsargv
作为字符串数组。如果您真的需要,也许更改Lua源代码getargs
可以完成这项工作。