首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在球拍脚本中调用` Racket‘

在球拍脚本中调用` Racket‘
EN

Stack Overflow用户
提问于 2015-12-13 02:11:54
回答 2查看 234关注 0票数 6

一般问题:

我可以在运行的Racket脚本中调用当前的racket可执行文件吗?

基本上,我希望在(system "racket ...")没有返回到我目前正在使用的球拍可执行文件的路径的情况下,替换(find-executable-path "racket")

上下文:

我真正想要的是尝试编译一些表达式,并断言它们会引发编译错误。这是用于单元测试的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-13 05:18:09

我不认为你需要在这里走出可执行文件。试试这个:

代码语言:javascript
复制
#lang racket

(require syntax/modread)

;; define a namespace anchor to attach a namespace to:
(define-namespace-anchor anchor)
;; define a namespace for expansion:
(define target-namespace (namespace-anchor->namespace anchor))

(define program-to-compile
  "#lang racket
(+ 3 4)")

;; go ahead and expand
(with-module-reading-parameterization
 (λ()
   (parameterize ([current-namespace target-namespace])
   (expand
    (read-syntax
     "bogus-filename"
     (open-input-string program-to-compile))))))

我认为我是正确的,当我说,球拍是非常干净的,它的能力提供编译器运行程序的纪律。

票数 5
EN

Stack Overflow用户

发布于 2015-12-15 19:32:09

对于小型测试,还可以从convert-compile-time-error库中使用syntax/macro-testing。它将导致编译时错误的表达式转换为在计算时引发运行时错误的表达式。表达式使用发生在模块中的环境,包括本地绑定;您不必篡改名称空间和eval

代码语言:javascript
复制
(check-exn #rx"bad syntax"
            (lambda () (convert-compile-time-error (lambda))))

还有convert-syntax-error (在同一个页面上)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34247279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档