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

Web 如何从其他RESTAS模块访问RESTAS子模块的上下文,web,lisp,common-lisp,hunchentoot,Web,Lisp,Common Lisp,Hunchentoot,比方说,我在模块m1中定义了一个动态变量*a*。然后我将模块m1装入m2模块中: (in-package m2) (mount-module sub (#:m1) (m1:*a* 3)) 现在如何从模块m2中获取值3?例如,目前,我必须以这样的方式对其进行破解: (restas:with-context (second (gethash 'm1 (gethash :modules

比方说,我在模块
m1
中定义了一个动态变量
*a*
。然后我将模块
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*))

这当然不是一个好办法。

一个稍微好一点的解决方案是:

(defmethod restas:module-context ((module symbol))
      (second (gethash module (restas::pkgmodule-traits-modules *package*))))
然后,您可以使用
模块上下文
访问模块的上下文,例如:

(with-context (module-context 'sub)
  m1:*a*)
或者更好:

(with-module 'sub
  m1:*a*)
请注意,您使用的是安装模块时使用的名称,而不是安装的软件包的名称


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

这确实更好,但仍然依赖于内部函数restas::pkgmodule traits modules。我猜框架不是为这种操作而设计的模块上下文方法现在在RESTAS中,因此您不再需要直接使用pkgmodule模块。