2016-08-12 6 views

ответ

5

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.

+0

Удивительный, спасибо. –

+1

Это тоже будет упрощено с помощью CHICKEN 5: 'use',' require-extension' и 'import' все ведут себя в основном одинаково. В конце концов мы, вероятно, избавимся от одного или двух из них. – sjamaan