*push-error-using-stack*

提供:GizmoLabs - だいたい CAD LISP なサイト
2014年8月18日 (月) 14:37時点におけるGizmon (トーク | 投稿記録)による版
構文
(*push-error-using-stack*)


機能
カスタム *error* ハンドラ内での AutoLISP スタックの変数の使用を示すエラー処理関数。
引数
  • なし
戻り値
T
  • メモ: カスタム エラー ハンドラから、エラーが発生した関数内で定義されているスタック上のローカル AutoLISP 変数にアクセスできる。
  • *push-error-using-stack* 関数に対する呼び出しは、*push-error-using-command* に対する以前の呼び出しより優先される。
  • *push-error-using-command* または *push-error-using-stack* が呼び出されていない場合、AutoLISP は既定で *push-error-using-stack* が呼び出された場合と同様に動作する。
  • 注: カスタム *error* ハンドラ内で command 関数が使われている場合、この関数は使用できない。
サンプル
(setq var1 "グローバリュいち"      ; グローバル変数をセット
      var2 "グローバリュに")

(defun mySub_err (err_msg)
    (if (/= err_msg "Function cancelled")
      (progn
        (prompt (strcat "\nエラー : " err_msg))
        (prompt (strcat "\nローカルサブ1: " var1))
        (prompt (strcat "\nローカルサブ2: " var2))
        (terpri)
      )
    )

    (command-s "._undo" "_e")
    (command-s "._U")  
    (setq *error* olderr)
  (princ)
)

(defun subUtil (val / olderr var1 var2)
    (*push-error-using-stack*)         ; カスタム エラー ハンドラーがローカル変数にアクセス権を持つことを示す。
    (setq olderr *error*
          *error* mySub_err)

    (command "._undo" "_group")        ; このサンプルでは実行されないがエラー ハンドラーを設定するための良いフレームワーク

    (setq var1 "サブ1"                 ; ローカル変数をセット
          var2 "サブ2")
  
    ;; Perform your tasks here
    (strcat "Foo" val)
  
    (command "._undo" "_e")
    (setq *error* olderr)              ; *error* の復元
    (*pop-error-mode*)                 ; *push-error-using-command* 終了のお知らせ
)

(defun my_err (err_msg)
    (if (/= err_msg "Function cancelled")
      (progn
        (prompt (strcat "\nエラー : " err_msg))
        (prompt (strcat "\nローカル1: " var1))
        (prompt (strcat "\nローカル2: " var2))
        (terpri)
      ))

    (command "._undo" "_e")
    (command "._U")
    (setq *error* olderr)
  (princ)
)

(defun myUtil (val / var1 var2)
    (setq olderr *error*
          *error* my_err)

    (*push-error-using-command*)       ; カスタム エラー ハンドラーのcommand-s ではなくコマンド関数の使用を示す

    (setq var1 "ローカル1"            ; ローカル変数をセット
          var2 "ローカル2")

    (command "._undo" "_group")        ; このサンプルでは実行されないがエラー ハンドラーを設定するための良いフレームワーク

    (subUtil val)                      ; 使用するカスタム関数を呼び出す *push-error-using-stack*

    (/ 1 0)                            ; トリガー、カスタム エラー ハンドラーの削除コードを設定するときに不適切な値を持つ関数を呼び出す

    ;; なんらかのタスクを実行

    (command "._undo" "_e")
    (setq *error* olderr)              ; *error* の復元
    (*pop-error-mode*)                 ; *push-error-using-command* 終了のお知らせ
)

; サンプル コードをロードした後、コマンド プロンプトに対して (myutil 1) と入力してネストした関数の
; エラー ハンドラを入力し、(myutil "String") と入力してメイン関数のエラー ハンドラをテストする。


関連事項