タイトルの通り。
name
はnamespace
と対になる関数で、c.l.Named
なオブジェクトの名前空間修飾を除いた名前部分の文字列を返す。
(name 'foo/bar) ;=> "bar"
そういう理解だったのでてっきりNamed
なオブジェクト、つまりシンボルとキーワードに対してしか適用できないと思っていた。
なので、これまで「シンボル、キーワードもしくは文字列を受け取って文字列に型変換する」という場合には、以下のように書いていた:
(if (string? x)
x
(name x))
name
が文字列も受け取れることを利用すると、実は簡潔にこう書ける:
(name x)
ちなみに、「シンボル、キーワードもしくは文字列を受け取ってキーワードに型変換する」場合には、keyword
がシンボル/キーワード/文字列を受け取れることを利用して次のように書ける:
(keyword x)
Clojureでは、enum的な値が欲しくなった場合にシンボル/キーワード/文字列を使うことが多い(シンボルを使うケースは比較的少ないが)。また、往々にしてこれらの値はinterchangeableに使えることが期待されるので、これらの値の簡潔な相互変換の方法は重宝する。