Skip to content

eval-after-loadとafter-load-functionsの呼び出し順について

2015/03/27

前回に引き続いて、今度は eval-after-loadafter-load-functions の 呼び出し順についてです。

結論

試してみたところ次のようになりました。

  1. eval-after-load (文字列指定)
  2. after-load-functions
  3. eval-after-load (シンボル指定)

呼び出し位置によっては eval-after-load が多用されている状況での ちょっとした順番の入れ替えに使えるかなと思ったのですが、 ちょっと意外な結果でした。

eval-after-load を多用した場面での不具合調査の時に、 この情報が役に立つ…かな?

検証用のコード

(defun my-test-after-load-function (&rest _args))
(defun my-test-eval-after-load-a ())
(defun my-test-eval-after-load-b ())

(trace-function #'my-test-after-load-function)
(trace-function #'my-test-eval-after-load-a)
(trace-function #'my-test-eval-after-load-b)

(add-hook 'after-load-functions #'my-test-after-load-function)

(with-eval-after-load 'foo
  (my-test-eval-after-load-a))

(with-eval-after-load "foo"
  (my-test-eval-after-load-b))

(add-to-list 'load-path "/tmp")

(require 'foo)
  • /tmp/foo.el
    (provide 'foo)
    

結果

======================================================================
1 -> (my-test-eval-after-load-b)
1 <- my-test-eval-after-load-b: nil
======================================================================
1 -> (my-test-after-load-function "/tmp/foo.el")
1 <- my-test-after-load-function: nil
======================================================================
1 -> (my-test-eval-after-load-a)
1 <- my-test-eval-after-load-a: nil
広告

From → Emacs

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。