在Redis上向Lua脚本传递空参数?

5

我有一个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'

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


不传递任何内容,程序内部将会是 nil。否则,你总是会收到一个字符串。 - hjpotter92
@hjpotter92 是的,但问题(和示例)是针对在nil参数之后存在非nil参数的情况。这种情况下,我应该如何传递应为nil的参数?请参阅示例。 - Eli
1个回答

4
不,命令行参数始终是一个字符串,即使您像这样传递参数:
lua script.lua "test argument" "" "end"

您仍将获得:
argv[1] = "test argument"
argv[2] = ""   --empty string
argv[3] = "end"

在这种情况下,argv[4] = nil,但我认为这不是你想要的,因为程序希望在结尾处得到一个非空的参数。
所以为什么不在脚本中设置一些标志字符串来代表nil,例如使用字符串"nil"作为标志,这样你就可以在脚本中进行测试。
if argv[1] ~= "nil" then return argv[1] end

这就是我现在正在做的事情,但我想肯定有一种方法可以在中间传递nil。如果你想让人们使用设置为nil的变量,没有这个功能似乎真的很不正常。 - Eli
@Eli,可以这样考虑:Lua是用C实现的,C将argv作为字符串数组传递。如果你真的需要的话,也许改变Lua源代码中的getargs可以完成任务。 - Yu Hao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接