我从nodejs调用Lua脚本。我想传递一个数组作为参数。我在Lua中解析该数组时遇到问题。
以下是一个例子:
var script = 'local actorlist = ARGV[1]
if #actorlist > 0 then
for i, k in ipairs(actorlist) do
redis.call("ZADD","key", 1, k)
end
end';
client.eval(
script, //lua source
0,
['keyv1','keyv2']
function(err, result) {
console.log(err+'------------'+result);
}
);
它给了我这个错误:
“ERR错误运行脚本(调用f_b263a24560e4252cf018189a4c46c40ce7d1b21a):@ user_script:1:user_script:1:错误的参数#1到'ipairs'(表格预期,得到字符串)
答案 0 :(得分:2)
您只需使用 ARGV :
即可local actorlist = ARGV
for i, k in ipairs(actorlist) do
并在控制台中传递参数,如下所示:
eval "_script_" 0 arg1 arg2 argN
答案 1 :(得分:0)
您只能将字符串传递到Redis lua脚本中。
如果需要将值数组传递到Redis lua脚本中,则可以执行以下操作:
let script = `
if #ARVG > 0 then
for i, k in ipairs(ARGV) do
redis.call("ZADD","key", 1, k)
end
end`;
client.eval(
script, //lua source
0,
...['keyv1','keyv2'],
function(err, result) {
console.log(err+'------------'+result);
}
);
此处的关键是在调用eval时将keyv1
和keyv2
作为单独的参数传递。 (我在这里使用es6语法)