(vl-catch-all-apply 'function list) ??
本帖最后由 尘缘一生 于 2022-2-25 23:20 编辑如标题,
如果函数没有变量表的,如何扑捉错误?
或者错误不管执行下去呢?
[*]
[*](setq msg (vl-catch-all-apply
[*] '(lambda ()
[*] ......
[*] ......
[*] ......
[*] )
[*] )
[*] )
[*] (If (VL-Catch-All-Error-P msg) ;如果有错误
[*] (VL-Catch-All-Error-Message msg);返回出错提示
[*] msg ;否则返回执行结果
[*] )
如上所示,封装无名函数?是否正确,没事?
注记:经测试,格式是正确的 2022-2-25
本帖最后由 尘缘一生 于 2022-2-25 23:19 编辑
[*];;;*************函数 gxl-catchapply.lsp*************
[*];;;(gxl-CatchApply fun args) 重定义 VL-CATCH-ALL-APPLY ,如函数错误返回nil
[*];;;(gxl-CatchApply vla-offset (list (vlax-ename->vla-object (car(entsel))) 10))
[*](defun gxl-CatchApply ( fun args / result )
[*];; ?Lee Mac 2010
[*](if
[*] (not
[*] (vl-catch-all-error-p
[*] (setq result
[*] (vl-catch-all-apply (if (= 'SYM (type fun)) fun (function fun)) args)
[*] )
[*] )
[*] )
[*] result
[*])
[*])
[*];;;***************** 函数 gxl-CatchApply*****************
(setq s(vl-catch-all-apply '(lambda()(/ 1 0))))
(if (vl-catch-all-error-p s)(vl-catch-all-error-message s)s) 本帖最后由 muwind 于 2022-2-25 22:57 编辑
(vl-catch-all-apply 'function list)
我理解这样的,list 是可以省略的,若'function本身是有参数的 list省略的结果就是 “参数缺少 ”
如果'function 本身没有参数。返回的是函数本身的错误,比如和尚那个 返回就是除数为0
说到底 这个重点在 apply ,应该说是apply的plus版
本帖最后由 尘缘一生 于 2022-2-25 23:17 编辑
muwind 发表于 2022-2-25 22:54
(vl-catch-all-apply 'function list)
我理解这样的,list 是可以省略的,若'function本身是有参数的 lis ...
我测试没问题,这就应该是标准写法:
[*]
[*];;卸载三领------------------
[*](defun c:removesl ( )
[*](setq msg
[*] (vl-catch-all-apply
[*] (function
[*] (lambda ()
[*] (slexit (slmsg "卸载三领 V2.0" "卸載三領 V2.0")(slmsg "你要卸载三领吗?请谨慎确定!" "妳要卸載三領嗎?請謹慎確定!"))
[*] (if (menugroup "SLMENU") (vl-cmdf "menuunload" "slmenu")) ;卸载菜单
[*] (bf-removesupportpath (list (slpath sl-path0)));;删除支持路径
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "SLMENU.CUIX"))
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "SLMENU.cuix"))
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "SLMENU.bak.cuix"))
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "SLMENU.mnu"))
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "SLMENU.mnr"))
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "SLMENU_light.mnr"))
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "三领设计.vlx"))
[*] (sl:filesystem-deltree (strcat (slpath sl-path0) "\\" "实用程序"))
[*] (sl:filesystem-deltree (strcat (slpath sl-path0) "\\" "用户程序"))
[*] (sl:filesystem-deltree (strcat (slpath sl-path0) "\\" "excel计算"))
[*] (sl:filesystem-deltree (strcat (slpath sl-path0) "\\" "填充"))
[*] (sl:filesystem-deltree (strcat (slpath sl-path0) "\\" "图库"))
[*] (sl:filesystem-deltree (strcat (slpath sl-path0) "\\" "安装说明"))
[*] (delstartupsuite (strcat (slpath sl-path0) "\\" "三领设计.VLX") "三领设计");删除启动组
[*] (uninssetup);;删除acadxxxxdoc.lsp
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "SLMENU.dll"))
[*] (vl-file-delete (strcat (slpath sl-path0) "\\" "SLMENU.DLL"))
[*] (sl:filesystem-deltree (slpath sl-path0))
[*] )
[*] )
[*] )
[*])
[*](if (vl-catch-all-error-pmsg) ;;如果有错误
[*] (vl-catch-all-error-message msg);;返回出错提示
[*] (princ "\n 三领设计 V2.0 已成功卸载")
[*])
[*])
页:
[1]