Emacsで request.el を使ってAPIを叩くプログラムを作成するため、いわゆるコールバック函数を実現する方法を調べてました。
ある函数の引数に、コールバックさせたい函数を渡し、それを実行させればよいのですが、それには2つの方法があります。
引数 cbfunc
にコールバック函数が設定されているとき、
(funcall cbfunc)
または
(apply cbfunc)
のどちらかで 引数が示す函数を呼び出しすことができます。
ここで funcall
と apply
の違いが分からず悩みました。函数の定義はどちらも同じです。
Function: funcall function &rest arguments
Function: apply function &rest arguments
これらが使われているいろいろなソースコードを読んだりし、小一時間は悩みました。
・・・が、結局のところマニュアルに書いてあったではないですか。
逆に言えば、 実行時にいくつの引数を渡すか決まっている時は、funcallを使用すればよい わけですね。
ドキュメントはきちんと読みましょう、でした。