数日前にemacsを使い始めた(require 'package-name)
ところ、package-installを使用して上記のパッケージをインストールするときに不要な場所を読みました。しかし、なぜ、(require 'package-name)
実際には何が行われload-file
、load
手順とはどのように異なるのでしょうか。
数日前にemacsを使い始めた(require 'package-name)
ところ、package-installを使用して上記のパッケージをインストールするときに不要な場所を読みました。しかし、なぜ、(require 'package-name)
実際には何が行われload-file
、load
手順とはどのように異なるのでしょうか。
回答:
あなたならばload
、ライブラリを繰り返し、そのファイルが読み込まれ、そのコードが(、毎回あなたがそれを読み込む)を繰り返し評価しました。
require
ライブラリを繰り返し使用する場合load
、ライブラリは1回だけ使用されます(ライブラリが既にロードされている場合は、最大で-まったく使用されません)。
require
require
ライブラリの大部分のライブラリには(provide 'FEATURE)
特定のFEATURE
名前のコードが含まれているため、最初にライブラリをロードするために使用されなかった場合でも、この効率を提供します。そのコードは、ライブラリのロード時に、どのようにロードされたかに関係なく評価され、そのときにデータを更新して、require
何かする必要があるかどうかを判断するときにチェックします。
require
特定のライブラリがロードされていることを確認する必要がある場合は、ほとんどの場合、独自のコードで使用します。
ELPAパッケージでこれを頻繁に行う必要がない理由は、パッケージマネージャーがパッケージ内のオートロードCookieを自動的に処理し、そのパッケージのオートロードのファイルを生成するためです。Emacsの起動時にパッケージシステムが初期化されると、各パッケージのオートロードファイルが評価され、オートロードされたすべての関数が識別されます。自動ロードされた関数が呼び出されると、関数の実際の定義を含むライブラリが自動的にロードされます。
パッケージの作成者は、ユーザーが直接呼び出すことが期待される可能性のある各関数にオートロードCookieを追加できます。したがって、それらの期待が正しけれrequire
ば、パッケージを使用したり、明示的にロードしたりする必要はありません。
独自のカスタムオートロードを定義することもできます。独自の構成でライブラリのカスタム遅延読み込みと遅延構成を使用したい場合C-hig (elisp) Autoload
RETも参照(elisp) Hooks for Loading
してください。(後者は、「このライブラリがロードされるまでこのコードを評価しないでください」と言います。これは、「必要になるまでこのライブラリをロードしない」オートロードメカニズムとうまく結び付いています)。
(elisp) Named Features
。
M-x describe-function
doc-stringを読むことです。別名doc-stringをC-h f
入力M-x describe-function RET require RET
して読み取ります。次にM-x describe-function RET load-file RET
、doc-stringを入力して読み取ります。次にM-x describe-function RET load RET
、doc-stringを入力して読み取ります。3つのdoc-stringsをすべて読んだ後、質問を編集して3つの関数をすべて比較対照し、それに関してまだ理解していないことを明確にしてください。変数についても同じ手順を使用します-つまりM-x describe-variable
。