Я пытаюсь импортировать некоторые функции из нестандартных встроенных функций SBCL для использования с сокетом. Когда я делаю это за пределами слизи, с открытой интерактивной оболочкой + SBCL она работает, но не в SLIME.Импортировать пакет в SLIME REPL
Что я сделал:
(import 'sb-bsd-sockets:host-ent-address)
(import 'sb-bsd-sockets:get-host-by-name)
или
(use-package :sb-bsd-sockets)
После этого ни один, SLIME встречает меня с ошибкой, говоря, что я пытаюсь импортировать что-то уже в пакете CL-пользователя , Это исправляемая ошибка, которую я исправляю, выбирая символы, найденные в пакете sb-bsd-socket. Дальнейших ошибок не последовало.
Затем, когда я пытаюсь скомпилировать функцию:
(defun nslookup (hostname)
(if hostname
(sb-bsd-sockets:host-ent-address (sb-bsd-sockets:get-host-by-name hostname))
nil))
Он работает. Но если я пытаюсь скомпилировать это:
(defun nslookup-1 (hostname)
(if hostname
(host-ent-address (get-host-by-name hostname))
nil))
Тогда я получаю предупреждение о неопределенных функций, и сообщение об ошибке при попытке вызова nslookup-1
.
К моему удивлению, если я пытаюсь сделать это в РЕПЛ:
CL-USER> #'host-ent-address
#<STANDARD-GENERIC-FUNCTION HOST-ENT-ADDRESS (1)>
CL-USER>
она "работает". То есть он знает эту функцию, но решает не использовать ее ...
Должен быть какой-то (специальный?) способ либо импортировать пакеты в REPL SLIME, либо, по крайней мере, символы из этих пакетов, в противном случае очень неудобно использовать длинные имена для тестирования, а затем для их замены для фактической программы ...