1

私はemacs lispでプログラミングする方法を学んでいます。関数定義をメッセージ バッファに出力する単純な関数を作成しようと考えました。これはうまくいきます:

(let (
(fDefAsString (symbol-function 'scroll-down)) 
)
(message "%s" fDefAsString)
(switch-to-buffer-other-frame "*Messages*"))

しかし、これを引数を取ることができる関数にしたかったのです。引数は、定義を確認したい関数の名前です。だから私はこれを試しました:

(defun message-function-definition (nameOfFunction)
(let (
(fDefAsString (symbol-function 'nameOfFunction)) 
)
(message "%s" fDefAsString)
(switch-to-buffer-other-frame "*Messages*")))

そして、私はこれを書きました:

(message-function-definition 'scroll-down)

次に、「eval-buffer」を実行しました。

このエラーが発生し続けます:

デバッガーが入力されました -- Lisp エラー: (void-function nameOfFunction) symbol-function(nameOfFunction) (let ((fDefAsString ...)) (message "%s" fDefAsString) (switch-to-buffer-other-frame " Messages " )) メッセージ関数定義(スクロールダウン) eval((メッセージ関数定義 (引用スクロールダウン))) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively( eval-last-sexp nil nil) recursive-edit() byte-code("\306 @\307=\203!

引用、引用解除、および「nameOfFunction」を使用しようとしましたが、これを機能させることができません。私は何を間違っていますか?

4

1 に答える 1

1

引用を外してみましたか?これは私にとってはうまくいきます:

(defun message-function-definition (nameOfFunction)
  (let ((fDefAsString (symbol-function nameOfFunction)))
    (message "%s" fDefAsString)
    (switch-to-buffer-other-frame "*Messages*")))

いくつかのヒント:

  1. コードが正しくインデントされていません。リージョンを選択して でインデントし直すとtab読みやすくなります。

  2. 「Emacs Lisp イントロ」を数時間かけて作業すると、StackOverflow で一度に 1 つの質問をしてすべてを理解するよりも、Emacs-lisp で物事がどのように機能するかをよりよく理解できるようになります。

  3. symbol-function人間が読める関数の定義を示すようには設計されていません。ほとんどの場合、実際に役立つものは何も表示されません。

    これを試して:

    (find-function-other-window 'scroll-down)
    
于 2012-08-18T22:35:20.140 に答える