日曜プログラミング

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

require 一辺倒でなく use もいいかなあ

Clojure を使い始めた頃は名前の衝突とどの名前空間だか分からなくなるので

(require '[clojure.string :as s])

のスタイル一択でしょ、と思ってたが、書くコードが増えてくるにつれ :as で短くした修飾すら打つのを面倒に感じるようになってきた。emacs で補完はしてくれるけどそれでも面倒。

で、何も考えずに use するとライブラリによっては名前がぶつかる事も当然の如く出てきた。この事に対する対応方法も Clojure ではちゃんと用意されている。

自分自身はあまり使ってなかったが、

(use '[clojure.string :only [join]])

で使うのを限定したり、逆に

(use '[clojure.string :exclude [join]])

で特定のを使わないようにと言う指定もできる事を最近知った。

名前の変更もできちゃう。

(use '[clojure.string :rename {join str-interleave}])

まあ全て ClojureDocs に書いてあるんですけどね。

また、use を使い出すと名前の衝突はなくともソースを見てるとこれどの名前空間の関数だったっけと確認したい事も出てきたので探してみたらあった。

(resolve '+)
;=> #'clojure.core/+

サンプルは実質意味ないけど外部ライブラリを use した時などで時々知りたくなるのでメモ。

この辺りのスタイルは自分の中でもあまり固まってないので今後はまた変わっていくかもしれない。