Допустим, у меня есть какой-то модуль foo.rkt
, который обеспечивает x
на этапе 1.
#lang racket
(begin-for-syntax
(define x 5)
(provide x))
Когда вы запускаете (module->exports "foo.rkt")
, вы возвращаетесь ((1 (x ())))
, что означает, что предоставляется x
на этапе 1 другие привязки не предоставляются.
Теперь в другом модуле я мог бы статически импортировать x
во время выполнения, используя for-template
:
#lang racket
(require (for-template "foo.rkt"))
x ; => 5
Но это статично,и так всегда будет.
Если бы это было на фазе 0, я мог бы использовать dynamic-require
.Но кажется, что вы можете использовать dynamic-require
только для запуска кода фазы 1, а не для получения каких-либо значений из этого запущенного кода.
Также есть dynamic-require-for-syntax
, но мне так и не удалось работать.
Наконец, есть также namespace-require
, но затем он переводит его в фазу 1 пространства имен, а не в фазу 0. Так что я мог бы сделать что-то вроде (eval '(begin-for-syntax (writeln x))
, но это будет печатать только значение x
, а неверните его.
Также есть namespace-variable-value
, но он также, кажется, только возвращает значения на фазе 0.
Итак, есть ли возможность динамически (не статически) импортировать фазу 1?переменная из модуля?