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

问题描述:

假设我在模块m1内定义了一个动态变量*a*。然后我安装模块m1m2模块:如何从其他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。

+0

这确实比较好,但仍依赖于内部函数'restas :: pkgmodule-traits-modules'。我猜这个框架并不是为这种操作设计的 – Necto 2014-09-09 13:55:12

+0

模块上下文方法现在在RESTAS中,所以你不再需要直接使用pkgmodule-traits-modules。 – Thayne 2014-09-10 04:12:49