Bug 55284 - woo-get-option не обрабатывает #f параметры
Summary: woo-get-option не обрабатывает #f параметры
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: alterator (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: manowar@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-07-20 20:23 MSK by Ajrat Makhmutov
Modified: 2025-07-22 04:09 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ajrat Makhmutov 2025-07-20 20:23:15 MSK
alterator/alterator/interfaces/guile/woo.scm:78:
(define (woo-get-option cmd option . default)
  (cond
   ((and (pair? cmd) (plistq option (cdr cmd))) => cdr)
   (else (if (pair? default) (car default) ""))))

Предположим. что наш backend при вызове (woo "is_obraz_building" "/kopidel") возвращает:
(("/kopidel" is_obraz_building #f))

Тогда (woo-get-option (woo "is_obraz_building" "/kopidel") 'is_obraz_building) вернёт пустую строку, хотя должен вернуть #f.
То есть сейчас woo-get-option не может определить - отсутствует ли параметр в cmd или же он выставлен на #f.
Comment 1 manowar@altlinux.org 2025-07-20 22:05:06 MSK
А какой тип данных определён для is_obraz_building? Я уверен на 99%, что существует "официальный" способ вернуть bool из backend3. По-моему, для этого нужно определить тип параметра как "bool", а затем использовать функции write_true() и write_false() в коде. Но возможно, я это придумал
 :) Завтра перепроверю. Но и вы тоже поищите примеры по имеющемуся коду.
Comment 2 Ajrat Makhmutov 2025-07-22 04:08:50 MSK
Был не прав. Нужно вызывать не
(woo-get-option (woo "is_obraz_building" "/kopidel") 'is_obraz_building)
а
(woo-get-option (cond-car (woo "is_obraz_building" "/kopidel")) 'is_obraz_building)

Пример.
scheme@(guile-user) [3]> (woo-get-option '("/a" b #f) 'b)
$3 = #f

Смотрел по примеру woo-read-first, где cond-car сразу используется. :(