Next: Library Search, Previous: Loading, Up: Loading
Emacs Lispには、ロードのためのインターフェイスがいくつかあります。
たとえば、autoloadは、
ファイルで定義された関数向けに場所を確保するオブジェクトを作成します。
自動ロードする関数を呼び出すと、
ファイルの実際の定義を得るためにファイルをロードします(see Autoload)。
requireは、ファイルをすでにロードしていなければロードします
(see Named Features)。
これらの機構はすべて、最終的には、関数loadを呼び出して動作します。
この関数は、Lispコードのファイルを探してオープンし、 その中のフォームすべてを評価してから、ファイルをクローズする。
ファイルを探すために、
loadはまずfilename.elcという名前のファイル、 つまり、filenameに‘.elc’を付加した名前のファイルを探す。 そのようなファイルが存在すれば、それをロードする。 そのような名前のファイルがなければ、loadはfilename.elという名前のファイルを探す。 そのファイルが存在すれば、それをロードする。 いずれの名前のファイルもみつからなければ、 最終的に、loadは、なにも付加しないfilenameという名前のファイルを 探し、存在すればそれをロードする。 (関数loadがfilenameを探す手順は賢くない。(load "foo.el")を評価すると、 foo.el.elという名前のファイルを探してしまう。)省略可能な引数nosuffixが
nil以外であれば、 ‘.elc’と‘.el’の接尾辞を試さない。 この場合、目的のファイルの正確な名前を指定する必要がある。 正確なファイル名を指定し、かつ、nosuffixにtを使えば、 foo.el.elのようなファイル名を探してしまうことを防げる。省略可能な引数must-suffixが
nil以外であれば、loadは、ディレクトリ名を明示していない限り、 ファイル名は‘.el’か‘.elc’で終るものと仮定する。 filenameにディレクトリ名が明示してなく、かつ、 接尾辞も指定してなければ、loadは接尾辞を必ず付加する。filenameがfooやbaz/foo.barのように 相対ファイル名であると、
loadは変数load-pathを使って ファイルを探す。 filenameにload-pathに指定した各ディレクトリを付加し、 最初にみつかったファイルをロードする。 デフォルトディレクトリを表すnilがload-pathに 指定されている場合に限り、カレントディレクトリを試す。loadは、まず最初のディレクトリで3つの可能な接尾辞を試し、 続いて2番目のディレクトリで3つの可能な接尾辞を試し、 というように行う。 see Library Search。foo.elcがfoo.elより古いという旨の警告を受け取った場合には、 foo.elの再コンパイルを考えるべきである。 see Byte Compilation。
(コンパイルしていない)ソースファイルをロードするときには、 Emacsがファイルを訪問する場合と同様に、
loadは文字集合を変換する。 see Coding Systems。nomessageが
nilであると、 ロード中にはエコー領域に ‘Loading foo...’や‘Loading foo...done’のメッセージを表示する。ファイルをロード中に処理できないエラーに出会うと、ロードを終了する。
autoloadによるロードの場合には、 ロード中に行われた関数定義はすべてもとに戻す。
loadがロードすべきファイルをみつけられないと、 普通、(‘Cannot open load file filename’を伴った) エラーfile-errorを通知する。 missing-okがnil以外であれば、loadはnilを返すだけである。変数
load-read-functionを使って、 式を読み取るためにreadのかわりにloadが使う関数を指定できる。 下記参照。ファイルを正しくロードできると
loadはtを返す。
このコマンドはファイルfilenameをロードする。 filenameが相対ファイル名であると、 現在のデフォルトディレクトリを仮定する。
load-pathを使わず、接尾辞も付加しない。 ロードするファイル名を正確に指定したい場合にこのコマンドを使う。
この変数は、
loadやeval-regionが、readのかわりに使う、式を読み取る関数を指定する。 その関数はreadと同様に引数を1つとること。通常、この変数の値は
nilであり、 これらの関数がreadを使うことを意味する。注意: この変数を使うかわりに、
eval-regionの引数read-functionとして 関数を渡す新しい別の機能を使ったほうが見通しがよい。 see Eval。
Emacs構築時のloadの使い方についての情報は、
See Building Emacs。