Clojure の Macro 中(defmacro)での型ヒント
英語ならググれば割とすぐ出てくる話題だが自分用にメモ。
最近は Clojure で CLI ツール書く時、GraalVM で実行 exe を生成できる可能性を残すべく 自分が書くコード中では reflection warning を出さないよう型ヒントをつけまくってる。
ある日 defmacro
中で reflection warning 出てる時これを解消するにはどうすれば良いのかが分からなかった。どうも defmacro 中では単純に
公式リファレンスのように書いてもダメみたい。
自分がやりたいのは defmacro
引数中に型ヒントを付与したかったのだが
stackoverflow にあった。
(defmacro def-string [name value] `(def ~(vary-meta name assoc :tag `String) ~value))
引用元:Stackoverflow の Clojure defmacro loses metadata トピック回答
なるほど ^
ってリーダーマクロだったのか(あまり良く分かってない)。
以下余談。
余談
余談1: シンタックスクォート中のアンクォート(~
)中にまたクォートする('
)
のは未だにパッとは分からんなあ。
余談2: はてなの markdown の解釈の問題かどうかは分からんけどシンタックスクォートの文字も余談 1 に表示したかったけどエスケープの仕方が良く分からんので諦めた。
余談3: 今回初めて知ったけどClojure公式サイトのマクロの説明ってものっそい説明少ないのね。肝になる余談1に上げた主要文字に関する説明全然ないし。あんまり使わせたくないのかなあ。