Импорт определенных символов common lisp

Я часто использую такие символы пакетов:

(ql:quickload :cl-json)


(cl-json:encode-json-to-string .... )

Я хотел бы использовать его так, без части cl-json:

(defpackage custom-sender
  ;; import the exactly the symbols I need from a package
  (:import-from :cl-json :encode-json-to-string)
  (:use :cl))

(encode-json-to-string .....)

Как видите, я попытался использовать import-from, чтобы получить этот единственный символ.

Однако я все еще получаю сообщение об ошибке, что encode-json-to-string не определено.

О: добавить (in-package :custom-sender), прежде чем использовать его? Вероятно, у вас есть подсказка в сообщении об ошибке: «функция CL:ENCODE… не определена». где вы можете увидеть квалификатор пакета CL вместо вашего.

Ehvince 25.11.2022 10:28
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
1
1
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

DEFPACKAGE определяет пакет. Он сам не устанавливает никакой области действия.

Если вы хотите установить область действия пакета, используйте IN-PACKAGE. Вы импортировали символ в определенный пакет, затем вам нужно сделать этот пакет текущим, чтобы увидеть эффекты.

Простая загрузка чего-либо может не установить определенный пакет, который вы ожидаете.

Помнить:

Система ASDF может определять ноль или более пакетов. система и пакеты — это два разных и ортогональных понятия в Common Lisp.

Система ASDF (популярный инструмент сборки) — это инструментальное название библиотеки/некоторого программного обеспечения. Это может быть скомпилировано, загружено и т.д.

Пакет Common Lisp — это пространство имен для символов. Это стандартная функция языка. пакеты ничего не знают о системах.

В некоторых языках программирования (скажем, в Java) класс может быть определен в одном файле и также быть пространством имен. В Common Lisp есть файлы, пространства имен, модули/системы,... все независимые концепции. Вполне возможно определить библиотеку, вкл. его n пакетов в одном файле. Обычно люди организуют свое программное обеспечение в виде набора файлов, одного или нескольких пакетов и одной или нескольких систем. тогда системы представляют собой набор файлов, которые вместе могут быть скомпилированы/загружены.

«пакеты ничего не знают о системах» — чрезвычайно важная мысль, о которой я не знал. Спасибо вам за это.

Vinn 25.11.2022 15:01

Другие вопросы по теме