为什么函数compose
在解释器csi
中而不是在编译器csc
中定义?我知道我可以很容易地自己定义它,但我只是想知道为什么会有这样的差异。
答案 0 :(得分:5)
compose
程序来自单位data-structures
(请参阅the manual或API docs)。您可以输入(use data-structures)
。
至于为什么它在csi
中可用而在csc
中默认情况下是一个毛茸茸的实现细节; csi
解释器只需要自己加载一些模块以提供解释器环境。由于它的实现方式,csi
加载的所有内容也可以在顶层获得。在CHICKEN 5中,这种情况已经有了很大的改进,解释器从一个干净的顶级环境开始。
所以这在实践中意味着你应该始终明确(use)
程序所需的所有模块,以确保它在编译模式和解释模式下工作。您也可以将整个程序包装在module内,而不是将程序放在顶级环境中。模块总是有一个完全干净的环境,因此在编译它时与解释它时没有区别。