Регистрация | Войти
Lisp — программируемый язык программирования
Новый RESTAS
amartynov - 01.02.2013 18:45, Сообщений - 8
В процессе миграции со старого на новый RESTAS огреб:
debugger invoked on a TYPE-ERROR in thread
#<THREAD "main thread" RUNNING {10029F1593}>:
  The value NIL is not of type HASH-TABLE.

Где-то тут:
0: (SB-IMPL::GETHASH3 :EXPORT-ROUTE-SYMBOLS NIL NIL)[:EXTERNAL]
1: (RESTAS::REGISTER-ROUTE-TRAITS
    SYSTEM
    #<HASH-TABLE :TEST EQL :COUNT 3 {100AC9B8A3}>)

Есть идеи, в чем причина?
[#]
Я тоже такое отгребал ;) Только не помню где. Что сделал то? И какая версия? из quicklisp или из git?
archimag - 01.02.2013 18:57
[#]

I found it!!!

У меня было:

(define-route system ....)

Из другого пакета через :use прикатил символ system. Он и заиспользовался.

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

amartynov - 01.02.2013 18:57
[#] Ответ на комментарий от amartynov 01.02.2013 18:57
> Возможно, что это можно считать багом 

Ну, в общем, это по-любому баг, должен хотя бы предупреждать, что что-то не так.

> должен был новый создаться в текущем пакете.

А старый куда девать?
archimag - 01.02.2013 19:02
[#] Ответ на комментарий от archimag 01.02.2013 19:02
у меня "The value NIL is not of type HASH-TABLE" вылетало, когда в функции монтировал модуль:

(defun foo ()
  (restas:mount-module ...)
)

Пришлось использовать грязный хак:
(defun foo ()
 (progn
  (in-package 'current-module)
  (restas:mount-module ...)
)
)
klimenko.serj - 02.02.2013 01:39
[#] Ответ на комментарий от klimenko.serj 02.02.2013 01:39
> Пришлось использовать грязный хак:

Достаточно было 
(defun foo ()
  (let ((*package* (find-package '#:current-modules))
    (restas:mount-module ..)
)
)
Но вообще такой способ использования меня удивляет :)
archimag - 02.02.2013 11:52
[#] Ответ на комментарий от archimag 01.02.2013 19:02
Тут так.

Есть пакеты A и B.

A экспортирует, например, SYMBOL.

(define-module B
(:use :A) ...)

(define-route SYMBOL ...)

Что мешает сделать B:SYMBOL при определении маршрута. А клиент пусть сам разбирается на что он хотел сослаться.

В данный момент у маршрута будет символ A:SYMBOL и, соответственно, все взрывается с несовсем понятной диагностикой.

Как вариант, можно вставить проверку что текущий пакет при вызове define-route такой же, что и у символа, идентифицирующего маршрут.
amartynov - 02.02.2013 21:36
[#] Ответ на комментарий от archimag 01.02.2013 18:57
 С Github. Последняя версия на утро пятницы (могу хэш посмотреть, но в понедельник).
amartynov - 02.02.2013 21:37
[#] Ответ на комментарий от archimag 02.02.2013 11:52
> Но вообще такой способ использования меня удивляет :)

У меня в систему таким образом могут монтироваться "на лету" директории (restas-direcotry-publisher) выбранные пользователем.
Такая специфическая админка ))
klimenko.serj - 03.02.2013 02:21
@2009-2013 lisper.ru