我對雞的(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