Как получить доступ к контексту подмодулей RESTAS из других модулей RESTAS

Допустим, я определяю динамическую переменную *a* внутри модуля m1, Тогда я монтирую модуль m1 в m2 модуль:

(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*))

Что, конечно, даже близко не подходит.

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.

Другие вопросы по тегам