日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

Clojure の Macro 中(defmacro)での型ヒント

英語ならググれば割とすぐ出てくる話題だが自分用にメモ。

最近は ClojureCLI ツール書く時、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に上げた主要文字に関する説明全然ないし。あんまり使わせたくないのかなあ。