Clojure: Ссылочный пример для банковской транзакции
Я все еще новичок в Clojure, точно знаю, что я пытаюсь решить проблему, связанную со сценарием банковских транзакций для университета.
Проблема довольно проста: мне нужно разработать решение для кредитования, дебетования и перевода денег.
Я остановился здесь:
(def account
(ref 100))
(defn credit [account amount]
"Credit"
(dosync
(alter account + amount)))
(defn debit [account amount]
"Debit"
(dosync
(if (> amount (balance account))
(throw (Exception. "Insuficient Funds"))
(alter account - amount))))
(defn transfer [from to amount]
"Transfer"
(dosync
(if (<= amount (balance from))
(do
(Thread/sleep 10)
(debit from amount)
(credit to amount))
(throw
(Exception. "Insuficient Funds")))))
Я думаю, что нет ничего сложного для понимания, и приведенный выше код работает.
Я должен добавить номер счета, описание транзакции, данные и сумму и хранение в памяти в каждой функции выше, как:
(defn credit [account description data amount]
"Credit"
(dosync
(alter account + amount)))
Я пробовал с хэш-картой, векторами и другими вещами, но не сработало. Также я пытаюсь найти это решение в этой книге: Программирование Clojure, но все еще сложно реализовать.
Спасибо за ваше время и дайте мне знать, если вам нужно больше информации.
1 ответ
Я думаю, что нашел способ развить этот сценарий.
При создании банковского счета я использую ссылки и структуру для сохранения всех необходимых данных (имя учетной записи, номер учетной записи и список операций со всеми транзакциями, которые будут созданы)
(defn create-account [name account-number]
"Create account"
(ref (merge {:name name :account-number account-number :operations '()})))
(def joey
"Account for tests"
(create-account "joey" 12345678))