Регистрация | Войти
Lisp — программируемый язык программирования
RSS
The value GETHASH is not of type (UNSIGNED-BYTE 8)
anaumov - 08.12.2016 01:32, Сообщений - 1
Всем привет

Подскажите как проще всего можно поменять тип данных.
У меня в хеш-таблице (SIMPLE-ARRAY CHARACTER (11)), а нужно, как я понимаю, (UNSIGNED-BYTE 8).

Я работаю с SNMP модулем, и для одного из необходимых параметров - пароля - используется :md5. Ей, как я понял, обычный массив букв не нравится.

(defun get-info (hash)
  (format t "~A~%" (type-of (gethash "PASSWORD" hash)))
  (format t "~A~%"
    (snmp:with-open-session
      (s (gethash "HOST" hash)
        :user (gethash "USERNAME" hash)
        :auth '(:md5 (gethash "PASSWORD" hash))
)

      (snmp:snmp-walk s (gethash "OPTION" hash))
)
)
)

Получится ли просто обернуть запрос gethash в функцию, которая переконвертирует тип? Подскажите как правильно решить задачу.

Спасибо.

p.s. Если передать просто "password" (пароль в кавычках), то весь вызов срабатывает без проблем. Если же этот же пароль (точно такого же типа) положить в хеш-таблицу, :md5 начинает жаловаться на тип данных.
Другими словами, этот код работает:

(defun get-info (hash)
  (format t "~A~%" (type-of (gethash "PASSWORD" hash)))
  (format t "~A~%"
    (snmp:with-open-session
      (s (gethash "HOST" hash)
        :user (gethash "USERNAME" hash)
        :auth '(:md5 "PaSsWoRd")
)

      (snmp:snmp-walk s (gethash "OPTION" hash))
)
)
)
[#]
Проблема была в том, что :auth передается quoted-список, т.е. интерпретор игнорировал вычисление gethash.
Решение выглядит достаточно просто:

(defun get-info (hash)
  (format t "~A~%" (type-of (gethash "PASSWORD" hash)))
  (format t "~A~%" (type-of "password"))
  (format t "~A~%"
    (snmp:with-open-session
      (s (gethash "HOST" hash)
        :user (gethash "USERNAME" hash)
        :auth (list ':md5 (gethash "PASSWORD" hash))
)

      (snmp:snmp-walk s (gethash "OPTION" hash))
)
)
)
anaumov - 11.12.2016 03:27
@2009-2013 lisper.ru