我要编译此脚本:
Red [File: %b.red]
context [
a: 123
hidden: 999
set 'global-exports context [
export-a: a
]
]
probe global-exports
但是尝试用$ ./red-13oct19-a4ee537c -r b.red
编译时出现错误:
*** Red Compiler Internal Error: Script Error : Invalid path value: global-exports
*** Where: register-object
*** Near: [objects/context/global-exports: make object! [
a: none
hidden: none
]]
通常,您可以使用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
编译动态代码will be possible with JIT compiler,这是将来计划的,但不是Red版本1.0之前的计划。
((感谢@ 9214和@hiiamboris的想法on red/help gitter chat]