| Summary: | woo-get-option не обрабатывает #f параметры | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Ajrat Makhmutov <rauty> |
| Component: | alterator | Assignee: | manowar <manowar> |
| Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | boyarsh, imz, manowar, sem |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
А какой тип данных определён для is_obraz_building? Я уверен на 99%, что существует "официальный" способ вернуть bool из backend3. По-моему, для этого нужно определить тип параметра как "bool", а затем использовать функции write_true() и write_false() в коде. Но возможно, я это придумал :) Завтра перепроверю. Но и вы тоже поищите примеры по имеющемуся коду. Был не прав. Нужно вызывать не
(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 сразу используется. :(
|
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.