明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1032|回复: 4

[提问] (vl-catch-all-apply 'function list) ??

[复制链接]
发表于 2022-2-25 00:48:53 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 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 01:57:48 | 显示全部楼层
本帖最后由 尘缘一生 于 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*****************

发表于 2022-2-25 16:37:33 | 显示全部楼层
(setq s(vl-catch-all-apply '(lambda()(/ 1 0))))
(if (vl-catch-all-error-p s)(vl-catch-all-error-message s)s)
发表于 2022-2-25 22:54:51 | 显示全部楼层
本帖最后由 muwind 于 2022-2-25 22:57 编辑

(vl-catch-all-apply 'function list)
我理解这样的,list 是可以省略的,若'function本身是有参数的 list省略的结果就是 “参数缺少 ”
如果'function 本身没有参数。返回的是函数本身的错误,比如和尚那个 返回就是除数为0
说到底 这个重点在 apply ,应该说是apply的plus版
 楼主| 发表于 2022-2-25 23:12:33 | 显示全部楼层
本帖最后由 尘缘一生 于 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-p  msg) ;;如果有错误
    •       (vl-catch-all-error-message msg)  ;;返回出错提示  
    •     (princ "\n 三领设计 V2.0 已成功卸载")
    •   )
    • )

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-14 14:35 , Processed in 0.309779 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表