我有一个简单的lua脚本:
local json = redis.call('GET', KEYS[1])
if json == false then
return nil
end
local newJson = string.gsub(json, '"isViewed":false', '"isViewed":true', 1)
return redis.call('SET', KEYS[1], newJson)
这可以按预期工作。
但如果我跳过newJson声明并直接进入:
local json = redis.call('GET', KEYS[1])
if json == false then
return nil
end
return redis.call('SET', KEYS[1], string.gsub(json, '"isViewed":false', '"isViewed":true', 1))
然后我从Go“Redigo”Redis客户端收到此错误:
ERR Error running script (call to f_3dc195393616dc1f56a13d6c471e0b68b3e4c8b3): @user_script:5: ERR syntax error
为什么会这样? string.gsub只是根据这个页面返回一个字符串:
答案 0 :(得分:2)
在原生Lua中,string.gsub返回2个值。也许电晕参考不正确?
第一个返回值是修改后的字符串。 第二个返回值是发生的匹配数。
var employeesParent = xDocument.Descendants("Employees").Where(element => element.Parent.Attribute("name").Value == departmentName);
var employees = (from emp in employeesParent.Descendants()
select new Employee
{
DepartmentName = departmentName,
FirstName = emp.Attribute("FirstName").Value,
Surname = emp.Attribute("Surname").Value
}).ToList();
这里你只将第一个返回值传递给recis.call
而在下面的调用中,您将两个返回值都传递给redis.call,这会导致错误。
local newJson = string.gsub(json, '"isViewed":false', '"isViewed":true', 1)
return redis.call('SET', KEYS[1], newJson)
尝试redis.call('SET', KEYS[1], string.gsub(json, '"isViewed":false', '"isViewed":true', 1))
查看您确实拥有多少返回值。