如何从其他RESTAS模块访问RESTAS子模块的上下文

时间:2013-03-18 18:41:19

标签: web lisp common-lisp hunchentoot

假设我在模块*a*中定义了一个动态变量m1。然后我在m1模块中挂载模块m2

(in-package m2)

(mount-module sub (#:m1)
   (m1:*a* 3))

如何从模块m2获取值3?例如,目前,我必须以这种方式破解它:

(restas:with-context
    (second (gethash 'm1
                     (gethash
                       :modules
                       (gethash (find-package :m2)
                                restas::*pkgmodules-traits*))))
    m1:*a*))

当然,这甚至都不是一个好方法。

1 个答案:

答案 0 :(得分:1)

稍微好一点的解决方案如下:

(defmethod restas:module-context ((module symbol))
      (second (gethash module (restas::pkgmodule-traits-modules *package*))))

然后,您可以使用module-context访问模块的上下文,例如:

(with-context (module-context 'sub)
  m1:*a*)

或者更好:

(with-module 'sub
  m1:*a*)

请注意,您使用安装模块时使用的名称,而不是您安装的软件包的名称。

更新:我描述的方法已添加到RESTAS。