gpt4 book ai didi

lua - Redis Lua 脚本解包返回不同的结果

转载 作者:IT王子 更新时间:2023-10-29 06:06:24 24 4
gpt4 key购买 nike

通过运行 sadd a b c 设置

当我对集合 a 执行这段代码时keystoclear1 中只有一个值“b”。keystoclear2 作为其中的两个值。

local keystoclear = unpack(redis.call('smembers', KEYS[1]))

redis.call('sadd', 'keystoclear1', keystoclear)

redis.call('sadd', 'keystoclear2', unpack(redis.call('smembers', KEYS[1])))

我绝不是 lua 专家,所以我在这里可能会有一些奇怪的行为,但我想知道是什么原因造成的。

我使用 redis-cli 和 stackexchange.redis 客户端在 Windows 和 Linux 版本的 Redis 上测试了这个。在所有情况下都具有相同的行为。这是一个简单的例子,我实际上想存储解包的结果,因为我需要用它执行几个操作。

更新:我理解这个问题。

table.unpack() only returns the first element

Lua always adjusts the number of results from a function to the circumstances of the call. When we call a function as a statement, Lua discards all of its results. When we use a call as an expression, Lua keeps only the first result. We get all results only when the call is the last (or the only) expression in a list of expressions.

最佳答案

此案例与您在更新中引用的案例略有不同。在这种情况下,unpack(可能)返回多个元素,但您只存储一个元素并丢弃其余元素。如果您使用 local keytoclear1, keytoclear2 = ...,您可以获得其他元素,但是存储表本身并根据需要解压缩它要容易得多:

local keystoclear = redis.call('smembers', KEYS[1])
redis.call('sadd', 'keystoclear1', unpack(keystoclear))

只要 unpack 是最后一个参数,您就会得到要解包的表中存在的所有元素。

关于lua - Redis Lua 脚本解包返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38384713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com