是否可以确定是否在沙箱中运行Racket程序?
我问的原因是因为我有一个创建文件的Racket宏。 DrRacket后台扩展器可以防止创建文件(应该如此)。但是,这样做会导致窗口底部出现错误,说明无法创建文件。
所以,我想确定我是否在沙盒中,如果我在,则不要创建该文件,并且请完成宏。
答案 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))