paulpipi
发表于 2020-9-3 10:00:14
真牛,不过不会用
自贡黄明儒
发表于 2020-9-3 18:55:20
晓东老大主持了大家讨论,使用(vl-bt),可查出错误,我一直使用这个方法,不用编程
77077
发表于 2020-9-5 20:01:28
多谢酸菜鱼,每次
tanjurun
发表于 2020-10-8 16:10:25
试试,看行不行先
Zrrrrr
发表于 2020-10-8 22:40:22
请问(setq lst (eval (cons list lst)))是为了做什么呢?
菜卷鱼
发表于 2020-10-10 09:11:11
Zrrrrr 发表于 2020-10-8 22:40
请问(setq lst (eval (cons list lst)))是为了做什么呢?
为了写局部变量的时候可以用' (...) 代替 (list ... ) 做成表
比如
(setq a 1 b 2 c 3)
(mapcar 'princ'(a b c ))
返回ABC
(mapcar 'princ(eval (cons list'(a b c))))
就会返回123
你直接写,肯定更费力,但是用于局部变量,就好用多了
像我附上的那个 prlst
就可以 (prlst '(a b c)) ,(prlst (list a b c))也行
如果没加上 (eval (cons list lst)) 这一句
就必须得 (prlst (list a b c))
sunwei2009
发表于 2020-10-12 14:14:35
顶一下,,谢谢楼主的分享
llsheng_73
发表于 2020-10-13 09:40:20
本帖最后由 llsheng_73 于 2020-10-13 09:42 编辑
(vl-bt)第一次看到,不过试了下不知道怎么用,这个run 比较巧妙,不足之处是不管有多少错误,它始终只查第一处错误,不能识别嵌套语句内部错误(非第一层),也就无法对自定义函数带参数检查内部错误
对于非嵌套语句,改写了一下,可以一次性把所有错误查出来
(defun run (exprs / n)
(setq n 0)
(princ(apply'strcat(mapcar'(lambda(x / a)
(setq n(1+ n))
(if(vl-catch-all-error-p(setq a(vl-catch-all-apply'eval(list x))))
(strcat"\n第"(itoa n)"个表达式"(VL-PRINC-TO-STRING x) "\n报错:"(vl-catch-all-error-message a))""))
exprs)))(princ))
$ (run '((ALERT 2)(+ a 3)))
第1个表达式(ALERT 2)
报错:参数类型错误: stringp 2
第2个表达式(+ A 3)
报错:参数类型错误: numberp: nil
_$ (run '((ALERT)(+ a 3)(a 3)))
第1个表达式(ALERT)
报错:参数太少
第2个表达式(+ A 3)
报错:参数类型错误: numberp: nil
第3个表达式(A 3)
报错:no function definition: A
_$ (run '((ALERT"")(+ a 3)(a 3)))
第2个表达式(+ A 3)
报错:参数类型错误: numberp: nil
第3个表达式(A 3)
报错:no function definition: A
_$
另外,个人感觉不如VLIDE出错中断好用
fangmin723
发表于 2020-10-13 10:06:40
自贡黄明儒 发表于 2020-9-3 18:55
晓东老大主持了大家讨论,使用(vl-bt),可查出错误,我一直使用这个方法,不用编程
黄大师,这个是发帖讨论的话,给个入口呗!
菜卷鱼
发表于 2020-10-13 17:44:15
llsheng_73 发表于 2020-10-13 09:40
(vl-bt)第一次看到,不过试了下不知道怎么用,这个run 比较巧妙,不足之处是不管有多少错误,它始终只查第 ...
我的初衷不是这个,
主要是想用catch-error ,然后可以把这段写进我的另外的程序里,
可以看到我的这个run是有返回值的,
只是突然来灵感把它改成了查错程序