В общем случае динамический код можно обернуть с помощью функции do [...]
, которая обрабатывает блок кода как данные и использует интерпретатор для его запуска во время выполнения:
Red [File: %b.red]
context [
a: 123
hidden: 999
do [ ;-- the code inside is run by interpreter at runtime
set 'global-exports context [
export-a: a
]
]
]
probe get 'global-exports ;-- dynamic retrieval
Вы также должны получить значениядинамически, если вы не инициализируете его статически (например, global-exports: none
) где-то ранее.
В этом конкретном случае также будет достаточно заменить context
на make object!
:
Red [File: %b.red]
context [
a: 123
hidden: 999
set 'global-exports make object! [
export-a: a
]
]
probe global-exports
Компиляция динамическогокод будет возможен с JIT-компилятором , который планируется в будущем, но не раньше, чем в Red версии 1.0.
(спасибо @ 9214 и @hiiamboris за идеи для red / helpgitter chat )