タイトルの通り。
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に使えることが期待されるので、これらの値の簡潔な相互変換の方法は重宝する。