DrRacket使用load报错

racket是可以使用load的,将一个文件当作模块来使用,一个文件里面定义的function在另一个文件中也可以使用。[1]这是官方文档,但是照着写了一下还是会报错。

先创建一个文件place.rkt

#lang racket

(define city "Salt Lake City")
(define state "Utah")
(printf "~a, ~a\n" city state)

然后再创建一个文件test.rkt:

#lang racket
(load "place.rkt")

按照预期,应该会打印:

Salt Lake City, Utah

但是却报错了:

place.rkt:1:0: #%top-interaction: unbound identifier;
 also, no #%app syntax transformer is bound in: #%top-interaction

官方文档也解释了如果使用#lang racket那么test文件确实读不到place.rkt里面定义的东西,说使用#lang racket/load可以,但我试了还是不行,再次load的时候虽没有报错,但什么也不显示,定义的变量也用不了。

后来在stackoverflow上找了一个答案[2],把问题解决了。解决办法就是,不使用load,而是使用require,首先在place.rkt中添加一行(provide (all-defined-out))

#lang racket
(provide (all-defined-out))

(define city "Salt Lake City")
(define state "Utah")
(printf "~a, ~a\n" city state)

然后在test文件中使用:

#lang racket
(require "place.rkt")
city

就可以正常输出结果了:

Salt Lake City, Utah
"Salt Lake City"

[1] https://docs.racket-lang.org/guide/load.html
[2] https://stackoverflow.com/questions/45342053/how-do-i-load-my-file-at-drracket

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值