确定球拍计划是否在沙盒中

时间:2016-01-29 20:21:05

标签: macros racket sandbox

是否可以确定是否在沙箱中运行Racket程序?

我问的原因是因为我有一个创建文件的Racket宏。 DrRacket后台扩展器可以防止创建文件(应该如此)。但是,这样做会导致窗口底部出现错误,说明无法创建文件。

所以,我想确定我是否在沙盒中,如果我在,则不要创建该文件,并且请完成宏。

1 个答案:

答案 0 :(得分:0)

通常,您无法确定自己是否在沙盒中。但是,您确实有机会捕获尝试执行受限操作时引发的错误。但是,问题是您不知道将抛出什么类型的错误。所以你可以做的一件事就是抓住所有这些东西。使用with-handlers来捕获错误,使用exn:fail?来捕获所有错误。

(with-handlers ([exn:fail?
                 (lambda (x) (displayln "failing cleanly"))])
    (make-temporary-file))

请注意,此处可能会出现与沙盒无关的错误。例如,您可能因为无法创建文件而可能会收到错误:

(with-handlers ([exn:fail:filesystem?
                 (lambda (x) (displayln "Coudln't open file"))]
                [exn:fail?
                 (lambda (x) (displayln "failing gracefully"))])
  (make-temporary-file))