1

如果您在 Rebol 中运行脚本并说出类似的print {Hello}内容,您最终会调用系统版本的 PRINT

>> bind? 'print
== make object! [
    system: make object! [
        product: 'core
        version: 2.101.0.2.5
        build: 22-Jan-2013/2:44:29
        platform: [
            Macintosh osx-x86
        ]
        license: {Copyright 2012 REB....

假设我有一个脚本%repl-context.r,它定义了 PRINT 执行其他操作的上下文。有没有办法让 REPL 在该上下文中以交互方式运行几个连续的命令......?

4

2 回答 2

2

我不确定目的,但是您可以使用自己的输入/输出过程和托管循环来颠覆控制台:

while [not find ["q" "quit"] command: ask "my-prompt> "][
    result: do bind load command 'my-context
    if value? result [print ["==" mold result]]
    ()
]

我将此方法与用于 R2的HTTP 控制台一起使用。

另一种可能性是深入研究系统/端口/输入端口的工作原理。

于 2013-05-16T23:57:21.643 回答
2

有一个通用的 repl 控制台包装器来处理 StdIn StdOut 的 I/o 重定向。

我经常使用来自http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap的 rlwrap

它使用 GNU readline 库

于 2013-05-25T14:43:01.413 回答