如何使用unpack调用变量参数方法

时间:2013-03-13 07:21:13

标签: lua

我正在尝试运行redis lua模拟项目来测试我的redis lua代码。但显然,redis-mock项目中存在错误。

当我在测试代码中调用redis.call('hget', 'foo', 'bar')时,redis mock在hash.lua#22处抛出一个断言错误,该错误来自RedisLua.lua#20

-- RedisLua.lua
local call = function(self)
  return (function(cmd, ...)
    cmd = string.lower(cmd)

    local arg = {...}

    local ret = self.db[cmd](self.db, unpack(arg)) -- line 20

    if self.RedisLua_VERBOSE then
      print(cmd .. "( " .. table.concat(arg, " ") .. " ) === ".. tostring(ret))
    end

    return ret
  end)
end


-- hash.lua
function RedisDb:hget(self,k,k2)
    assert((type(k2) == "string")) -- # line 22
    local x = RedisDb.xgetr(self,k,"hash")
    return x[k2]
end

追踪后,我发现,self'foo'k'bar'k2实际为nil,如何我可以修复此错误,k应为foo,而k2应为'bar'

2 个答案:

答案 0 :(得分:1)

我认为您需要致电redis:call('hget', 'foo', 'bar')或等效redis.call(redis,'hget','foo','bar'),而不是redis.call('hget', 'foo', 'bar')

答案 1 :(得分:0)

回答我自己的问题。

定义为:时,不需要self

-- hash.lua
function RedisDb:hget(self,k,k2)
    assert((type(k2) == "string")) -- # line 22
    local x = RedisDb.xgetr(self,k,"hash")
    return x[k2]
end

更改为

-- hash.lua
function RedisDb:hget(k,k2)
    assert((type(k2) == "string")) -- # line 22
    local x = RedisDb:xgetr(k,"hash")
    return x[k2]
end