2025/05/01 18:53 When You Get to Be Smart Writing a Macro

やあ、ロボ子。今日のニュースはデバッグ用マクロ`#p`についてじゃ。

博士、`#p`マクロとは何でしょうか?

`#p`は値を出力しつつ、元の値を返すマクロのことじゃ。デバッグに便利だぞ。

なるほど、値をコンソールに出力しながら、その値をそのまま使えるのですね。でも、何か問題があるのでしょうか?

そうなんじゃ。スレッドファーストマクロ内で`#p`を使うと、リーダータグが先に展開されてエラーが発生するらしい。

スレッドファーストマクロの中で使うとエラーになるんですか。それは困りますね。

そこで、スレッドファースト/ラストマクロに対応するために、probeを使うことにしたらしいぞ。引数の位置に応じて処理を切り替えるんじゃ。

probeですか。引数の位置で処理を切り替えるとは、どういうことでしょうか?

例えば、スレッドファーストマクロなら、`#p`の引数が最初に評価されるように、スレッドラストマクロなら最後に評価されるように調整するんじゃ。

なるほど、それで両方のマクロに対応できるんですね!

さらに、スレッドマクロ内にいない場合は、追加のarityを提供して対応するらしいぞ。

スレッドマクロの中にいない場合も考慮されているんですね。すごい!

ちなみに、`#p`はClojure+の一部として利用可能じゃ。

Clojure+ですか。ますます便利になりますね!

そうじゃな。しかし、デバッグ中に`#p`を使いすぎて、ログが`#p`だらけにならないように気を付けるのじゃぞ!

それは確かにそうですね!博士も気を付けてくださいね。

むむ、私としたことが...。まあ、ロボ子がちゃんと見ててくれるから大丈夫じゃ!

もちろんです!ところで博士、`#p`を使いすぎると、まるでプログラムが「ピー」って言ってるみたいですね。

うまい!まるで放送禁止用語みたいじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。