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 オブジェクト内のメソッドを呼び出してるっぽい。