首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用unpack调用变量参数方法

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

Stack Overflow用户
提问于 2013-03-13 15:21:13
回答 2查看 234关注 0票数 0

我正在尝试运行一个redis lua模拟项目来测试我的redis lua代码。但是很明显,redis-mock项目中有bug。

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

代码语言:javascript
复制
-- 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,我该如何修复这个bug,k应该是fook2应该是<代码>D13

EN

回答 2

Stack Overflow用户

发布于 2013-03-13 15:27:29

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

票数 1
EN

Stack Overflow用户

发布于 2013-03-13 17:12:05

回答我自己的问题。

当定义为:时,不需要self

代码语言:javascript
复制
-- 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

更改为

代码语言:javascript
复制
-- hash.lua
function RedisDb:hget(k,k2)
    assert((type(k2) == "string")) -- # line 22
    local x = RedisDb:xgetr(k,"hash")
    return x[k2]
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15379174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档