2016-05-03 15 views
0

は、私はパッケージに3つの機能を持っていると仮定しますオートロードの仕組みは?

;;;###autoload 
(defun my-funcA() ...) 

;;;###autoload 
(defun my-funcB() ...) 

;;;###autoload 
(defun my-func-init() ...) 

機能の一つが呼び出された場合は、すべての関数宣言がロードされますか? このパッケージを使用するにはmy-func-initをロードする必要がある場合は、autoloadのすべてが冗長であることを意味しますか?

+0

また、[自動ロード機能を自動ロードするメカニズムは何ですか](http://stackoverflow.com/q/28889446) – phils

答えて

1

これらのコメントは単なるコメントです。

別のプロセスを使用して、関連付けられた定義をloaddefs.elファイルに抽出します。そのファイルがロードされると、それらのオートロードがすべて定義されます。したがって、非常に多くのライブラリの自動ロードはすべて、まとめて1つのファイルにまとめることができます。これは読み込みが高速です。

のMxelisp-index-searchRETautoload cookieRET

ライン上の魔法の自動ロードのコメント(多くの場合、 "自動ロードクッキー" と呼ばれる) は ';;; ###のautoload' で構成され、オートロード可能なソースファイル内の関数の実際の定義の直前に置かれています。 'M-x update-file-autoloads'コマンドは、対応する の 'autoload'呼び出しを 'loaddefs.el'に書き込みます。 ( 自動ロードクッキーとして機能する文字列と、 'update-file-autoloads'によって生成されるファイルの名前は上記のデフォルト値から変更できます。 を参照してください)Emacsをビルドすると 'loaddefs.el' 'autoload' 'M-x update-directory-autoloads'はさらに強力です。 現在のディレクトリ内のすべてのファイルの自動ロードを更新します。

パッケージマネージャは、任意のパッケージの自動ロードCookieを処理するため、パッケージ作成者はこれらのコメントを適切に追加するだけで済みます。

+0

「関数の実際の定義」がロードされているかどうかを知りたいのですが? – tom

+0

elispで? 'autoloadp'です。対話的に? 'C-h f 'はオートロードされた関数であることを知らせます。そうでない場合は、実際の定義がロードされています。 – phils

+0

待ちます。 (autoload 'my-func-A "my-func") ' '(autoload' my-func-B "my-func") 'と'(autoload 'my-func-init "を実行すると、 my-func ")'を '.emacs'に入れておけば、それらのうちの一つがロードされていれば、my-func内の全ての関数定義がロードされます。 – tom