2014-01-06 18 views
6

.emacsファイルではなく、オンデマンドで遅れてrequireコマンドを遅れて発行するようGNU Emacs 23をプログラムしようとしています。 loadコマンドの実行を遅らせたい場合は、autoloadを使用できます。しかし、requireloadは異なる種類の引数をとります。`autoload`として` require`するEmacs Lisp関数は、 `load`とは何ですか?

requireには、と同じジョブがあり、loadの場合は、あらかじめ定義された関数がありますか?そしてもしそうでなければ、私が自分自身を転がすのにどのようなツールを勧めますか?

+5

これを「autoload」で行うことができなかった方法を例に挙げることはできますか? – Barmar

+0

(参考になるかもしれません)http://ergoemacs.org/emacs/elisp_library_system.html – AAAfarmclub

答えて

6

autoloadに関してはrequireloadの間に違いはありません。 requireは、多かれ少なかれに降りてくるloadにちょうどフロントエンド、次のとおりです。あなたが見ることができるように

(defun require (feature &optional filename noerror) 
    (unless (featurep feature) 
    (let ((filename (or filename (symbol-name feature)))) 
     (load filename noerror)))) 

requireに与えられたシンボル名はloadに指定したファイル名と同じです。実際、Emacsセッションで評価される最初の(require 'foo)(load "foo")に相当します。

(auto-load 'foo-function "foo")foo-functionに使用すると、(require 'foo)で読み込むことができます。

2

「オンデマンド」には、どのような「需要」がありますか?

  1. 所与のコマンドまたは他の機能が必要(またはソフトニーズ)与えられたライブラリーは、その後、を機能するそれ自体が(require 'foo)又は(require 'foo nil t)を使用できる場合。ライブラリは、その関数の要求に応じてロードされます。

  2. ファイルが既にロードされているかどうかにかかわらず、複数回ロードする必要があるかどうか、つまり、いくつかの状況でファイルをリロードする必要があるかどうかを検討してください。例えば#2については、

、Lispのマクロのライブラリを使用して私のコード、私は、ユーザーがそのライブラリの新しいバージョンを取得する場合ことを確認するためicicles-mac.elだけで、requireを使用していません(例えば、新しいソースバージョンをダウンロードし、それをバイトコンパイルすると)、それを必要とする別のライブラリをバイトコンパイルするときはいつでも、その新しいバージョンが使用されます。 (これは重要です - マクロの変更のライブラリは、これらのマクロを使用する他のライブラリは、一般的に新しいマクロファイルをロードした後に再コンパイルする必要がある場合。)そのために、代わりにちょうど(require 'icicles-mac)私はこれを使用します。

(eval-when-compile 
    (or (condition-case nil 
      (load-library "icicles-mac") ; Use load-library to ensure latest .elc. 
     (error nil)) 
     (require 'icicles-mac)))   ; Require, so can load separately if not on `load-path'. 
4

もう一つの明確化を支援するための答え(これはコメントのために少し冗長だった):その後、

  • autoloadこの機能がすでに定義されていない場合」と言い、loadこのファイル(ifと関数が呼び出されます)。 "
  • requireは、 "このライブラリがロードされていない場合は、loadこのファイル(直ちに)です。「あなたはライブラリをロードするためにrequireを使用しない必要を行うことを特に

注;それは単に、あなたはそれが再び(あなたはしたくないと仮定しロードしないことを保証する方法です。。それはautoloadための似たような状況だと)、ライブラリ内の(provide 'FEATURE)式は任意の将来requireが、それは何もする必要がないことを知ることができますこれは、関係なく、ライブラリがロードされたどのように評価されません

ない - 場合ファイルがすでにロードされている(したがって、問題の関数が適切に定義されている)場合、autoload n o長い間は効果があります。

関連する問題