扩展lua-resty-*模块并调用父函数。

我正试着为每个lua-resty-redislua-resty-memcachedlua-resty-mysql模块写一个扩展默认模块的小类。 在我的子类中,我想调用父类的函数,但无论我阅读了多少有关Lua继承文档,都无法找到适当的方法。

例如,我想要重写connect()函数,做一些处理并在某个时刻调用父类的connect()函数。但是如何做到呢?

local redis = require "resty.redis"

function redis.connect(self, ...)
  
  -- 在这里做点事情
  
  local ok, err = parent:connect(...)
  
  -- 在这里做其他事情
  
  return ok, err
end

怎么才能实现呢?

需要注意的是,上述所有模块的结构都像这样:

local _M = { _VERSION = "0.1" }

local mt = { __index = _M }

function _M.new(self)
    return setmetatable({ foo = "bar" }, mt)
end

function _M.connect(self, ...)
    -- 连接
end

return _M

提前感谢!

点赞
用户2060502
用户2060502
local redis = require "resty.redis"
local original_connect = redis.connect

function redis.connect(self, ...)

  -- 在此处进行某些操作

  local ok, err = original_connect(self, ...)

  -- 在此处进行其他操作

  return ok, err
end

本地加载 resty.redis 模块,并将 redis.connect 函数保存在 original_connect 变量中。

然后定义了一个新的 redis.connect 函数,该函数在执行原始 redis.connect 函数之前和之后执行一些操作,并返回原始函数的返回值。

2015-07-31 14:23:12