我对鸡的(use)
和(import)
之间的差异有点模糊。同样,(load)
,(require)
和(require-extension)
怎么区别?使用vs导入vs需求vs需求延长鸡计划
这些东西在网站上似乎没有提及太多。
我对鸡的(use)
和(import)
之间的差异有点模糊。同样,(load)
,(require)
和(require-extension)
怎么区别?使用vs导入vs需求vs需求延长鸡计划
这些东西在网站上似乎没有提及太多。
Load
和require
是纯粹的运行时程序操作。 Load
接受一个字符串参数并将该名称(可以是源代码或编译代码)加载到正在运行的Scheme中,以便它定义的任何内容都可用。 Require
做同样的事情,但通过查看提供是否以相同的名称(通常由加载的文件)被调用来检查文件是否已被加载。它们在Scheme编程中比较少见,对应于其他语言的插件,其中编译时未知的代码需要加载。有关更多详细信息,请参阅手册页面eval
。
Import
涉及模块而不是文件。它会查找已命名的模块,该模块必须已经加载,并使得从该模块导出的名称在当前上下文中可见。为了成功导入模块,必须有一个导入库。它是语法,因此模块名称必须显式显示在调用中,并且不能在运行时计算。有关更多详细信息,请参阅模块手册页。
Require-library
做正确的事加载代码。如果代码已经是正在运行的Scheme的一部分,或者因为它是内置于Chicken中的,则它什么也不做。否则,它将加载一个核心库单元(如果有),否则将调用require
作为最后的手段。在编译时,它会做类似的事情来确保在运行时环境是正确的。有关更多详细信息,请参阅手册中的“非标准宏和特殊窗体”页面。
Use
做一个require-library
后跟一个import
在同一个名字。这是添加功能到您的鸡程序最常见的方式。但是,我们编写(import scheme)
和(import chicken)
,因为这些模块的功能已经加载。 Require-extension
是use
的准确同义词,提供了SRFI 55兼容性。在R7RS模式下,import
也是use
的同义词。
太棒了,谢谢。 –
这同样会通过CHICKEN 5进行简化:'use','require-extension'和'import'的表现基本相同。最终我们可能会摆脱其中的一个或两个。 – sjamaan