Обновление постмодернистского ряда более функциональным способом - PullRequest
0 голосов
/ 17 июля 2011

У меня есть пара классов (а именно 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 Ответ

2 голосов
/ 17 июля 2011

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

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

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