日曜プログラミング

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

Clojure のキーワードを文字列に変換する

小ネタ。

キーワードを文字列に変換するのは name がお手軽。

(name :foo)
=> "foo"

コロンも含めたければ単純に str で良い。

(str :foo)
=> ":foo"

ただ :foo/bar のような名前空間修飾があるタイプのキーワードはちょっと事情が異なる。
これを "foo/bar" としたくても name では

(name :foo/bar)
=> "bar"

と / 以降のもののみとなる。

この場合 namespace を使ったり、

(str (namespace :foo/bar) "/" (name :foo/bar))
=> "foo/bar"

単純な文字列処理として先頭を除くでも良いかもしれない。

(apply str (rest (str :foo/bar)))

また、仕組みは良く分からないがこういう取り方もあるみたい(元ネタ)

(str (.-sym :foo/bar))

これも同じ結果となる。
どうも Java の Keyword オブジェクト内のメソッドを呼び出してるっぽい。