@ Сванте почти наверняка прав.Простой способ проверить это - использовать функцию spyx
из библиотеки Tupelo :
(ns demo.core
(:use tupelo.core))
(defroutes routes
(GET "/" [] (spyx (layout/application "Home" (contents/index))))
(route/resources "/"))
, которая будет печатать что-то вроде:
(layout/application "Home" (contents/index))) => nil
при запуске,spyx
(«явный шпион») печатает заданное вами выражение, стрелку и значение выражения.spy
, spyx
, spy-pretty
и т. Д. также возвращают напечатанное значение (в отличие от println
, которое всегда возвращает nil
), поэтому вы можете вставить spy
распечатка в любом месте без нарушения цепочки обработки.Таким образом, вам не нужно писать что-то вроде:
(defroutes routes
(GET "/" [] (let [tmp-1 (layout/application "Home" (contents/index))]
(println "layout/application result => " tmp-1)
tmp-1)))
(route/resources "/"))
, чтобы напечатать отладочное сообщение.Чтобы spy
& друзья, добавьте это к :dependencies
в вашем project.clj
:
[tupelo "0.9.138"]
Обновление
Хмммм .... Не уверен, что могбыть проблемой.Я сделал простое демонстрационное приложение из lein new compojure demo-compojure
со следующим:
(ns demo-compojure.handler
(:use tupelo.core)
(:require [compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]))
(defn index []
(spy :index--result "Hello World"))
(defroutes app-routes
(GET "/" [] (spyx (index)))
(route/not-found "Not Found"))
(def app
(wrap-defaults app-routes site-defaults))
и результатами:
~/expr/demo-compojure > lein ring server
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Started server on port 3000
:index--result => "Hello World"
(index) => "Hello World"
Так что это работает.Кроме того, int?
является базовой функцией Clojure, так что это озадачивает.Возможно, создать чистый демо-проект, подобный приведенному выше, и взять его оттуда?