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模块。