多くの人がそうだと思うけど、Clojure のライブラリのロードあたりがよく分かんなかったのでドキュメントをよみよみ。 「Cheat Sheet」の Loading を参考にしてます。
参考
Loading
今回みていく関数の一覧:
分類 | 関数 |
---|---|
Load libs | require, use, import, refer |
List loaded | loaded-libs |
Load misc | load, load-file, load-reader, load-string |
Load libs
Clojure ライブラリの読み込みに関する関数。 Clojure のライブラリは、Java におけるパッケージみたいなもので、Java パッケージが一群のクラス(などの型)を含んでいるのに対して、Clojure ライブラリは一群の関数を含んでいます。
- require : ライブラリを読み込む
- refer : 現名前空間から指定した名前空間の関数を完全修飾名なしに参照できるようにする
- use : require & refer
- import : Java クラスをインポートする
require
Clojure ライブラリを読み込む。
(require 'clojure.string) ;; ライブラリを読み込む (require 'clojure.string 'clojure.test) ;; 複数のライブラリを読み込む (require '[clojure.string :as string]) ;; エイリアス (require '[clojure.string :refer (split)]) ;; use と同じ(1.4.0 以降)
ライブラリ名を指定する際にクォート(') を忘れずに。 Clojure ライブラリを require で読み込んでも、その中の関数を使う際にはライブラリの完全修飾名を書く必要があります。 Java の import のようにライブラリ名を省略したい場合は、use 関数を使うか :refer キーワードで指定してください(1.4.0以降)。
refer
読み込み済みのライブラリに対して、ライブラリ名を省略して関数を使えるようにする(現在の名前空間からのみ)。
(refer 'clojure.string :only '[capitalize trim]) ;; clojure.string ライブラリの capitalize 関数、trim 関数を ;; ライブラリ名なしで参照可能にする
use
require と refer をまとめて実行する。
(use '[clojure.string :only (split)]) ;; clojure.string ライブラリの split 関数のみを require & refer (use '[clojure.string :as s :only (split)]) ;; clojure.string ライブラリに s という別名をつけて s/split という風に split 関数を参照できるようにする
Clojure 1.4.0 からは require に :refer キーワードでフィルターを付ける方が推奨されているもよう。
import
Java クラスをインポートする。 require と違って、インポートした後ではクラスの完全修飾名(パッケージを入れた名前)は必要なし。 まぁ、普通の Java の import と同じ。
(import java.util.Date) ;; java.util.Date クラスをインポート (import '(java.util Date Calendar) ;; java.util パッケージの Date, Calendar クラスをインポート '(java.net URI ServerSocket) java.sql.DriverManager) ;; java.sql.DriverManager クラスをインポート
List loaded
REPL などであれこれライブラリを読み込んでいると、現在どんなライブラリが読み込まれているか分からなくなるので、読み込み済みのライブラリを取得する関数が用意されてます。
- loaded-libs
loaded-libs
現在読み込まれているライブラリのセット(ソート済み)を返す。
(loaded-libs)
Load misc
いろいろな方法で Clojure コードを読み込む関数が用意されてます。
- load : クラスパス上にあるファイルから Clojure コードを読み込む
- load-file : ファイルから読み込んで評価する
- load-reader : java.io.Reader から読み込んで評価する
- load-string : 文字列から読み込んで評価する
load
クラスパス上にあるファイルから Clojure コードを読み込む。
(load "hello_clojure/core") ;; 例えば src フォルダにクラスパスが通っているとして ;; src/hello_clojure/core.clj ファイルを読み込む(ファイルがあれば)
load-file
指定したファイルから Clojure コードを読み込んで、そのコードを評価(実行)する。
(load-file "src/hello_clojure/core.clj") ;; src/hello_clojure/core.clj ファイルから Clojure コードを読み込んで評価する
load 関数と違って、読み込んだコードを評価しますヨ。
load-reader
引数の java.io.Reader オブジェクトから Clojure コードを読み込んで評価する。
(load-reader (new java.io.StringReader "(println \"hello, world\")"))) ;; 引数の java.io.Reader オブジェクトから Clojure コードを読み込んで評価する
load-string
引数の文字列を Clojure コードとして評価する。
(load-string "(println \"hello, clojure\")")) ;; 引数の文字列「(println \"hello, clojure\")」を Clojure コードとして評価する
- 作者: Stuart Halloway,川合史朗
- 出版社/メーカー: オーム社
- 発売日: 2010/01/26
- メディア: 単行本(ソフトカバー)
- 購入: 10人 クリック: 338回
- この商品を含むブログ (71件) を見る