2016-08-12 48 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