Обновление постмодернистского ряда более функциональным способом

У меня есть пара классов (а именно book а также user). Мне нужно обновить book установив его lended слот для t И его lended-to заемщику id,

Я использую Postmodern в качестве бэк-энда к базе данных PostgreSQL

Это то, что я придумал (надеюсь, имена достаточно самоописуемы)

(defmethod lend-book ((to-lend book) borrower) ;borrower is a user instance
  (if (book-lent to-lend)
      nil
      (let (to-lend (get-dao 'book (book-id to-lend)))
        (setf (book-lent-to to-lend) (user-id borrower))
        (setf (book-lent to-lend) t)
        (update-dao to-lend))))

Но это кажется слишком обязательным для меня.

Есть ли более функциональный способ сделать это или мешает Постмодерн?

1 ответ

Решение

Вы изменяете состояние, вот что вы пишете. Я вижу это как идиоматическое.

Я просто вижу две проблемы с вашим кодом:

  1. Ваш defmethod перепутал его лямбда-список: (to-lend book), А не наоборот. Это должно дать некоторые предупреждения или ошибки.
  2. Причастие "одолжить" является "одолжено", поэтому слоты должны быть названы book-lent а также book-lent-to,
Другие вопросы по тегам