0

「ClojureによるWeb開発」という本の中で、コードは

(defn registration-page []
    (layout/common
        (form-to [:post "/register"]
            (label "id" "screen name")
            (text-field "id")
            [:br]
            (label "pass" "password")
            (password-field "pass")
            [:br]
            (label "pass1" "retype password")
            (password-field "pass1")
            [:br]
            (submit-button "create account"))))

次のようにヘルパー関数を使用して書き換えることができます。

(defn control [field name text]
  (list (on-error name format-error)
        (label name text)
        (field name)
        [:br]))

(defn registration-page []
  (layout/common
    (form-to [:post "/register"]
      (control text-field :id "screen name")
      (control password-field :pass "Password")
      (control password-field :pass1 "Retype Password")
      (submit-button "Create Account"))))

私の質問は次のとおりです。代替コードでは、パラメーターの値が文字列ではないのはなぜですか? たとえば、なぜ (control text-field :id "screen name") であり、 (control text-field "id" "screen name") ではないのでしょうか?

4

1 に答える 1

5

私は Hiccup に詳しくなく、あなたが言及した本を持っていません。しかし、Hiccup のソース コードを読むと、次のことがわかります。

ラベルはas-strと呼ぶmake-id関数を呼び出しています。その関数を見て、それが何をしているのかを見てください。

(defn ^String as-str
  "Converts its arguments into a string using to-str."
  [& xs]
  (apply str (map to-str xs)))

それはToStringプロトコルにつながります。

投稿したスニペットでキーワードの代わりに文字列を渡し、何が起こっているかを確認してください!

ソースコードは私たちが持つことができる最高のドキュメントです!

于 2013-12-02T17:16:07.700 に答える