【问题标题】:Passing Nil Arguments to Lua Script on Redis?将 Nil 参数传递给 Redis 上的 Lua 脚本?
【发布时间】:2013-06-04 08:46:38
【问题描述】:

我有一个 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 是的,但是问题(和示例)是针对在 nil 参数之后有非 nil 参数的情况。在那种情况下,我将如何为应该为零的参数传递任何内容?请参阅示例。

标签: lua redis


【解决方案1】:

不,命令行参数将始终是 string,即使您传递这样的参数:

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 这样想:Lua 是用 C 实现的,C 将 argv 作为字符串数组传递。如果你真的需要,也许改变 Lua 源代码getargs 可以完成这项工作。
猜你喜欢
  • 2018-01-05
  • 2017-05-23
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2019-11-01
相关资源
最近更新 更多