AutoCADのナレッジWebサイト:
""注:同じ名前の複数のユーザー関数を定義できますが、各定義には異なる数または種類の引数を使用できます。
誰でもこの機能を使用していますか?私は試しましたが、全く動作しません。 私は、この(file::AppendFile arg1)
のように呼び出すだけで、最新の定義されたfunction.Ifを呼び出すことができますは、AutoCAD、私があまりにも少ない引数を与えると述べた
Autolispユーザー関数のオーバーロード
2
A
答えて
1
"注:同じ名前の複数のユーザー関数を定義できますが、それぞれの定義で異なる数または種類の引数を受け入れることができます。
これは、AutoLISPのは不可能である。最後に評価defun
式は、名前空間でのシンボルのすべての以前の定義を上書きします - 二defun
式は即座になりますように、それ故にあなたの例ではfile:AppendFile
関数は2つの引数を必要とします関数を再定義する。
2つの引数(異なる長さの引数のリストを指定すること以外)を提供する唯一の方法は、式の評価の前にfile:AppendFile
関数を評価することです。
2
私はインストールのAutoCADとコンピュータではないので、私がチェックすることはできませんAutoLISPの場合ドキュメンテーションが述べるように動作しますが、さまざまな引数を関数に渡すための回避策を見てきました。
トリックは、すべての引数を単一のリストとして渡し、関数の本体でそのリストを処理することです。たとえば、次のように
(defun myFunction (argsList/path header)
(setq path (car argsList))
(setq header (cadr argsList))
(someFunction path "a" header)
)
...そして、あなたは(myFunction '(arg1))
または(myFunction '(arg1 arg2))
であなたの関数を呼び出すと思います。
上記の私の例では、リストコンストラクタリテラルを使用しているので、実際の文字列 "arg1"と "arg2"を渡すことに注意してください。変数の内容を渡す場合は、代わりに(myFunction (list var1 var2))
という形式を使用する必要があります。
これは少し醜いですが、それはオプションです。
関連する問題
- 1. Autolispのリストアイテム数
- 2. 関数のオーバーロード
- 3. $()関数のオーバーロード
- 4. ==関数のオーバーロード
- 5. C++オーバーロード関数
- 6. 関数のオーバーロード時のオーバーロード時のエラーcmath関数C++
- 7. バリデーショナルテンプレート関数のオーバーロード
- 8. rvalue関数のオーバーロード
- 9. R - 関数のオーバーロード
- 10. Typescript:関数のオーバーロード
- 11. 関数オーバーロード機構
- 12. シングルトンクラスのインスタンス関数のオーバーロード
- 13. C++の関数のオーバーロード
- 14. NetLogoの関数のオーバーロード
- 15. CodeIgniterでの関数のオーバーロード
- 16. スーパークラスの関数のオーバーロード
- 17. コントローラのパブリック関数のオーバーロード
- 18. objective-c:関数/メソッドのオーバーロード?
- 19. テンプレート関数のオーバーロードは
- 20. 関数のオーバーロードがTypeScript
- 21. 関数テンプレートのオーバーロード解決
- 22. Android ndkのC++関数オーバーロード
- 23. 仮想テンプレート関数のオーバーロード
- 24. JavaScript getElementById関数のオーバーロード
- 25. Typescript子クラスの関数オーバーロード
- 26. 仮想関数のオーバーロード
- 27. 複数のAPIレベルの関数のオーバーロード
- 28. 関数のオーバーロードの最大数は?
- 29. PyBind - オーバーロードされた関数
- 30. Typescript:数値の関数オーバーロード解決| ArrayBuffer
'::'はAutolispのシンボル名の一部として特別な意味を持っていますか、それとも単にあなたが使っている規則ですか? –