0

指定された条件で、この関数に関数の名前を出力したい。しかし、私はそれを取得する方法がわかりません。C++ では、プリプロセッサ マクロを使用できます__FUNCTION__。私は AutoLISP で何か似ていますか?

4

1 に答える 1

0

これは間違いなく可能です。2 つの状況を見てみましょう。

1)関数を書いています。

これは簡単なはずです。関数と同じ名前の変数を定義するだけで準備完了です。(上記のコメントで説明したように。)

関数の実際の名前よりもわかりやすいものを使用することもできます。(defun af () ...)「af」の代わりに「Awesome Function」と呼ぶこともできます。

また、標準の定数値の書式設定を使用することをお勧めします。単語を区切るには、アンダースコア付きの大文字を使用します。(setq FUNCTION_NAME "AwesomeFunction"). PI(これは、どちらが設定されているかと同じであり、変更しないでください。これは定数です。)

2) コードが実行されるまで名前がわからない関数を呼び出しています。

これのいくつかの例:

(apply someFunctionInThisVariable '(1 2 3))

(mapcar 'printTheNameOfAFunction '(+ setq 1+ foreach lambda))

(eval 'anotherFunctionInAVariable)

このように、変数に格納されている関数の名前を出力するには、関数(setq function 'myFunction)を使用する必要があり(vl-princ-to-string)ます。

(vl-princ-to-string function)   ;; Returns "MYFUNCTION"
(strcase (vl-princ-to-string function) T)   ;; Returns "myfunction"

(princ
   (strcase 
      (vl-princ-to-string function)
      T
   )
)            ;; Command line reads: myfunction

この(vl-princ-to-string)関数は、印刷可能な任意の型で使用でき、常に文字列を返します。数字とか単語とかわからなくても大丈夫です。

それが役立つことを願っています!

PS私が最初にこのテクニックを使用したのは、テスト関数を書いていたときです。関数と期待される値を送信すると、関数の名前を文字列の一部として出力することを含め、期待どおりに機能するかどうかをテストします。テストをセットアップする時間があれば非常に便利です。

于 2016-07-27T03:13:09.573 に答える