明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 助淫为乐

如何实现"函数使用出错时提示用法."

  [复制链接]
 楼主| 发表于 2007-11-25 21:56:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-12-16 02:51:00 | 显示全部楼层
我也想知道这个方法,调用函数如"参数太多"这样的错,根本就没办法知道是哪个函数出错啦
发表于 2007-12-16 07:39:00 | 显示全部楼层

可以这样定义函数:

(DEFUN TEST (STRL)
 (IF (AND (LISTP STRL) (/= (LENGTH STRL) 3)) (PROGN
  (PRINC "\nUseag : (TEST (LIST N1 R2 S3))")
 )
 (IF (AND (TYPE (CAR STRL)) 'INT) (TYPE (CADR STRL)) 'REAL) (TYPE (LAST STRL) 'STR))
  (PROGN
   (PRINC (CAR STRL)) (PRINC "\n")
   (PRINC (CADR STRL)) (PRINC "\n")
   (PRINC (LAST STRL))
  )
   (PRINC "\nUseag : (TEST (LIST N1 R2 S3))")
  )
 )
)
但当未给出参数时还是会出错。

 楼主| 发表于 2007-12-17 12:43:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-12-17 15:43:00 | 显示全部楼层
在命令行中使用这些函数时,如果出错,,,
试试这个,只能在命令行使用的时候得到,其他的情况我没有测试,记住,要退出模式,使用endsub命令。
(vl-load-com)
(defun sub_myerror(s)
   (if (= (type iwillrun) 'LIST)
       (princ (strcat "\n" (car iwillrun) s))
       (princ (strcat "\n" iwillrun s)))
)
(setq olderr *error* *error* sub_myerror)
(vlr-lisp-reactor nil '((:vlr-lispWillStart . myset)))
(defun sub1(a)
  (princ a )
)
(defun sub2(a)
  (princ a)
)
(defun sub3(a)
  (princ a)
)
(defun myset(a msg)
  (setq iwillrun msg)
)
(defun c:endsub()
 (setq *error* olderr olderr nil iwillrun nil)
 (vlr-remove-all :VLR-Lisp-Reactor)
)


;-----------------------------
测试结果:
命令: (sub3 1 2)
(sub3 1 2)参数太多
命令: (sub1)
(sub1)参数太少
命令: (sub2)
(sub2)参数太少
命令: (sub3 "我" “你”)
(sub3 "我" “你”)参数太多
命令: (sub1)
(sub1)参数太少
命令: (sub2)
(sub2)参数太少
命令: (sub3)
(sub3)参数太少
命令: endsub
((:VLR-Lisp-Reactor #<VLR-Lisp-Reactor>))
命令: (sub1)
; 错误: 参数太少
命令: (sub2)
; 错误: 参数太少
命令: (sub3 1 2)
; 错误: 参数太多


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

本版积分规则

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

GMT+8, 2025-6-19 23:00 , Processed in 0.184634 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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