「Push-error-using-stack」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
(ページの作成:「{{AutoLISP}} ; 構文 : (*push-error-using-stack*) ; 機能 : カスタム *error* ハンドラ内での AutoLISP スタックの変数の使用を示すエラー処...」)
 
編集の要約なし
 
6行目: 6行目:
; 機能
; 機能
:  カスタム *error* ハンドラ内での AutoLISP スタックの変数の使用を示すエラー処理関数。  
:  カスタム *error* ハンドラ内での AutoLISP スタックの変数の使用を示すエラー処理関数。  
* AutoCAD 2012から搭載





2016年2月23日 (火) 22:40時点における最新版

構文
(*push-error-using-stack*)


機能
カスタム *error* ハンドラ内での AutoLISP スタックの変数の使用を示すエラー処理関数。
  • AutoCAD 2012から搭載


引数

なし


戻り値
T (値 T が返される。)


  • MEMO:カスタム エラー ハンドラから、エラーが発生した関数内で定義されているスタック上のローカル AutoLISP 変数にアクセスできる。*push-error-using-stack* 関数に対する呼び出しは、*push-error-using-command* に対する以前の呼び出しより優先される。
  • *push-error-using-command* または *push-error-using-stack* が呼び出されていない場合、AutoLISP は既定で *push-error-using-stack* が呼び出された場合と同様に動作する。
  • 注 : カスタム *error* ハンドラ内で command 関数が使われている場合、この関数は使用できない。


サンプル
; 次に、*push-error-using-stack* 関数の使用例を示す。

(setq var1 "Global1"      ; グローバル変数を設定。
      var2 "Global2")

(defun mySub_err (err_msg)
    (if (/= err_msg "Function cancelled")
      (progn
        (prompt (strcat "\nError: " 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 "Sub1"                  ; ローカル変数
          var2 "Sub2")
  
    ;; なんかの処理
    (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 "\nError: " 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*)       ; カスタム エラー ハンドラーのコマンド-s の代わりに 
                                       ; Command 関数の使用を示す
  
    (setq var1 "Local1"                ; いくつかのローカル変数を設定。
          var2 "Local2")

    (command "._undo" "_group")        ; 次このサンプルでは実行されないが、エラー ハンドラーを
                                       ; 設定するための良いフレームワーク。
  
    (subUtil val)                      ; 使用するカスタム関数を呼び出す *push-error-using-stack*
  
    (/ 1 0)                            ; カスタム エラー ハンドラーをトリガーに不適切な値を持つ関数を呼び出す
                                       ; コードを設定するときを削除。
   
    ;; Perform your tasks here
  
    (command "._undo" "_e")
    (setq *error* olderr)              ; *error* を戻す
    (*pop-error-mode*)                 ; 終了の *push-error-using-command* 
)


関連事項