何が起こっているのかを実際に理解せずに当て推量で動作するようになったので、これを投稿すると思いました。誰かが説明してくれれば役立つかもしれないと思いました。
Compojureハンドラーで:paramsマップの要素を取得する方法を理解しています。
(GET "/something" [some_arg] "this is the response body")
また
(GET "/something" {{some_arg "some_arg"} :params} "this is the response body")
私はその部分が何をしているのか完全には理解していませんが{some_arg "some_arg"}:(
:remote-addrまた、リクエストの一部にもアクセスしたかったのsome_argです。そして、私は
(GET "/something" {{some_arg "some_arg"} :params ip :remote-addr}
(do-something-with some_arg ip))
したがって、引用符で囲まれていない文字列some_argとipは、値をバインドする変数の名前ですが、上のマップは有効なClojureマップではありません。それはどのように機能しますか?
また、これはRingリクエストマップ(defroutesマクロによって提供される)に対して評価されることもわかりますが、上記の式は関数またはマクロ定義ではないため、コードに有効な式として「存在する」にはどうすればよいですか?マクロ引数の通常のルールのある種の一時停止はありますか?私は、この非Lisp'erに理解できる破壊フォームの構文の定義を見つけることができませんでした。