2016-08-12 56 views

回答

5

Loadrequire是纯粹的运行时程序操作。 Load接受一个字符串参数并将该名称(可以是源代码或编译代码)加载到正在运行的Scheme中,以便它定义的任何内容都可用。 Require做同样的事情,但通过查看提供是否以相同的名称(通常由加载的文件)被调用来检查文件是否已被加载。它们在Scheme编程中比较少见,对应于其他语言的插件,其中编译时未知的代码需要加载。有关更多详细信息,请参阅手册页面eval

Import涉及模块而不是文件。它会查找已命名的模块,该模块必须已经加载,并使得从该模块导出的名称在当前上下文中可见。为了成功导入模块,必须有一个导入库。它是语法,因此模块名称必须显式显示在调用中,并且不能在运行时计算。有关更多详细信息,请参阅模块手册页。

Require-library做正确的事加载代码。如果代码已经是正在运行的Scheme的一部分,或者因为它是内置于Chicken中的,则它什么也不做。否则,它将加载一个核心库单元(如果有),否则将调用require作为最后的手段。在编译时,它会做类似的事情来确保在运行时环境是正确的。有关更多详细信息,请参阅手册中的“非标准宏和特殊窗体”页面。

Use做一个require-library后跟一个import在同一个名字。这是添加功能到您的鸡程序最常见的方式。但是,我们编写(import scheme)(import chicken),因为这些模块的功能已经加载。 Require-extensionuse的准确同义词,提供了SRFI 55兼容性。在R7RS模式下,import也是use的同义词。

+0

太棒了,谢谢。 –

+1

这同样会通过CHICKEN 5进行简化:'use','require-extension'和'import'的表现基本相同。最终我们可能会摆脱其中的一个或两个。 – sjamaan