Load
и require
- это чисто временные, процессуальные действия. Load
принимает строковый аргумент и загружает файл с таким именем (которое может быть исходным или скомпилированным кодом) в текущую схему, так что все, что он определяет, становится доступным. Require
делает то же самое, но проверяет, был ли файл уже загружен, посмотрев, было ли вызвано предложение с тем же именем (обычно загруженным файлом). Они относительно редки в программировании Схемы, соответствующие плагинам на других языках, где необходимо загрузить код, неизвестный во время компиляции. Дополнительную информацию см. На странице руководства для устройства eval
.
Import
касается модулей, а не файлов. Он ищет именованный модуль, который должен быть уже загружен, и позволяет экспортировать имена из этого модуля в текущем контексте. Чтобы успешно импортировать модуль, для него должна быть библиотека импорта. Это синтаксис, поэтому имя модуля должно отображаться явно в вызове и не может быть вычислено во время выполнения. Более подробную информацию см. На странице руководства на модулях.
Require-library
делает правильную вещь для загрузки кода. Если код уже является частью запущенной Схемы, либо потому, что он встроен в Chicken, он ничего не делает. В противном случае он загрузит блок базовой библиотеки, если он есть, или вызовет require
в качестве последнего средства. Во время компиляции он делает аналогичные вещи, чтобы убедиться, что среда будет корректной во время выполнения. Более подробную информацию см. На странице «Нестандартные макросы и специальные формы» в руководстве.
Use
делает a require-library
, а затем import
с таким же именем. Это самый распространенный способ добавить функциональность в вашу программу Chicken. Однако мы пишем (import scheme)
и (import chicken)
, потому что функциональность этих модулей уже загружена. Require-extension
- это точный синоним для use
, обеспечивающий совместимость с SRFI 55. В режиме R7RS import
также является синонимом для use
.
Удивительный, спасибо. –
Это тоже будет упрощено с помощью CHICKEN 5: 'use',' require-extension' и 'import' все ведут себя в основном одинаково. В конце концов мы, вероятно, избавимся от одного или двух из них. – sjamaan