0

所以我正在使用 DrRacket 并且因为我正在#lang scribble为我的程序制作手册,所以我想将我的程序运行的实际示例放在使用@interactions到目前为止,我已经得到了这一部分:

#lang scribble/manual
@(require (for-label racket))
@(require scribble/eval racket/sandbox)
@(define my-evaluator
   (parameterize ([sandbox-output 'string]
                  [sandbox-error-output 'string])
     (make-evaluator 'racket/base '(define (f) later) '(define later 5))))

当我这样做时

@interaction[#:eval my-evaluator]{
                                  @(f)
                                   }

然后我scribble --htmls ++main-xref-in manual.scrbl正确运行它呈现为:

> (f)
5

有没有办法使用我所有的定义(在不同的文件中)来使用 scribble 进行评估?我尝试将第 7 行更改为:

(make-evaluator 'racket/base '(define (f) later) '(define later 5) #:require "mydefs.rkt")))

但是当我尝试渲染它时,它会抛出这样的东西:

make-evaluator: bad requires: "mydefs.rkt"

我不想在make-evaluator零件中复制粘贴我的定义(它们很多!)有什么解决办法吗?谢谢敲诈者!

4

1 回答 1

0

IRC #racket的 asumu 帮助我解决了这个问题。我只需要这样做:

@(define my-evaluator
   (parameterize ([sandbox-output 'string]
                  [sandbox-error-output 'string])
     (make-base-eval #:lang 'racket '(define (f) later) 
                     '(define later 5) 
                     '(require "../man/manager.rkt"))))

请注意,我没有使用关键字,而是引用了 require 语句。

使用

@interaction[#:eval my-evaluator]{
                                  @(define man (new manager%))@(send man crear-nodo '9)
                                   }

完美呈现。

谢谢!

于 2014-12-12T00:28:41.443 回答