我在编辑器中打开了一个文件,并在旁边的控制台窗口中运行了一个方案。 以下是文件中的内容:
(import (rnrs))
(define THIS "Hello")
(display THIS) ;; does not work if loaded
我编辑文件中的定义,保存,然后切换到方案窗口并执行
(load "c:\\path\\to\\filename.ss")
我在输出中看到“Hello”,但是当我尝试访问这个时 - 这是未定义的。
我正在使用IronScheme(如果它是相关的)并且我是一般的新方案,那么如何通过修改和重新读取文件来更改会话中的定义?
答案 0 :(得分:4)
R6RS中没有功能load
;显然IronScheme有一个。您应该检查他们的文档,但最有可能发生的是加载的文件被读取,编译,然后在自己的环境中进行评估。因此将在该环境中定义标识符THIS
。显然,您无权访问该环境。再次,查看文档。
由于IronScheme声称符合R6RS标准,实现目标的正确方法是:
;;lib-for-this.ss
(library (lib-for-this)
(export THIS)
(import (rnrs))
(begin
(define THIS "hello")
(display THIS)))
然后当您想使用THIS
时:
> (import (lib-for-this))
hello ;; <= from `display` most likely
> THIS
"hello"