如何从其他RESTAS模块访问RESTAS子模块的上下文
问题描述:
假设我在模块m1
内定义了一个动态变量*a*
。然后我安装模块m1
在m2
模块:如何从其他RESTAS模块访问RESTAS子模块的上下文
(in-package m2)
(mount-module sub (#:m1)
(m1:*a* 3))
我怎样才能获得价值3现在从模块m2
?例如,目前,我必须以这种方式破解它:
(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*))))
然后你就可以访问上下文的模块module-context
,例如:
(with-context (module-context 'sub)
m1:*a*)
或者更好的是:
(with-module 'sub
m1:*a*)
请注意,您使用安装模块时使用的名称,而不是包装的名称你登上的年龄。
更新:我描述的方法已被添加到RESTAS。
这确实比较好,但仍依赖于内部函数'restas :: pkgmodule-traits-modules'。我猜这个框架并不是为这种操作设计的 – Necto 2014-09-09 13:55:12
模块上下文方法现在在RESTAS中,所以你不再需要直接使用pkgmodule-traits-modules。 – Thayne 2014-09-10 04:12:49