私は clojure を使い始めたばかりで、楽しみのためにプロジェクトを行っています。以下の関数では、いくつかのブログ投稿を表示しようとしています (いくつかのオプション付き)。[]
「as」オプションを使用して、クライアント コードに vectorと mapのどちらかを選択できるようにしたいと考えています{}
。しか持っていなかったときにこれが機能していましたが、ステートメント(into [] results)
を入れるとすぐに機能しなくなりました。(when)
私はそれが暗黙のようなものであるため、(when)
単に返すと思います。このように最後に使用することは、値を返すと予想される関数を終了する間違った方法であることは明らかです。これを機能させるにはどうすればよいですか?nil
(do)
(when)
(ns yf.models.post
(:require [clojure.java.jdbc :as sql]
[clojure.string :as str])
(:use [yf.models.helpers :only [date-format]]))
(defn all [& {:keys [order limit roots-only as]}]
(sql/with-connection (System/getenv "DATABASE_URL")
(sql/with-query-results results
[(str
"SELECT
id,
body,"
(date-format "created") ","
(date-format "modified")
"FROM post a"
(when (true? roots-only)
" WHERE NOT EXISTS (SELECT child_id from post_map b
WHERE a.id=b.child_id) ")
(when (and
(string? (order :column))
(string? (order :dir))
(or
(= (:dir order) "asc")
(= (:dir order) "desc")))
(str " ORDER BY a." (:column order) " " (:dir order)))
(when (and
(instance? Number limit)
(pos? limit))
(str " LIMIT " limit)))]
(when (and ;this is where the problem is
(string? as)
(not (str/blank? as)))
(when (= as "vector")
(into [] results))
(when (= as "map")
(into {} results))))))