我如何编译具有一些动态代码的脚本?

问题描述 投票:0回答:1

我要编译此脚本:

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
]] 
dynamic compilation interpreter jit red
1个回答
0
投票

通常,您可以使用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)。

在这种情况下,将contextmake 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]

© www.soinside.com 2019 - 2024. All rights reserved.