В случае сомнений используйте отладочные операторы печати. Сделайте так, чтобы ваш обработчик выглядел следующим образом:
:handler (fn [arg]
(println :handler-arg arg)
(reset! business-partner (:business-partner arg)))
Вы также можете использовать clojure.pprint/pprint
, чтобы красиво распечатать вывод, или также добавить (type arg)
к выводу.
Вы можете также хотите инициализировать атом с указанным значением c, таким как :bp-default
, чтобы вы могли видеть, является ли наблюдаемый вами nil
исходным или сбрасывается на nil
.
Обновление
Итак, ясно, что ключ :business-partner
не существует на карте, которую вы получаете. Это то, что вы должны отладить.
Попытка извлечь несуществующий ключ из карты всегда возвращает nil
. Вы также можете использовать 3-аргументную версию get
, чтобы сделать это явным. Преобразуйте
(:business-partner arg) => (get arg :business-partner ::not-found)
, и вы увидите ключевое слово ::not-found
, которое будет отображаться в вашем атоме, чтобы проверить, что происходит.
Для раннего выявления этих проблем я почти всегда использую простое Функция grab
из библиотеки Tupelo примерно так:
(:business-partner arg) => (grab :business-partner arg)
Функция grab
выдаст исключение, если ожидаемый ключ не найден. Это обеспечивает раннее предупреждение о проблемах, поэтому вы можете быстрее их отследить.
Еще один совет: в следующий раз используйте prn
вместо println
, и он будет сохранять двойные кавычки при выводе строки, например:
"Main Street"