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是有返回值的,

只是突然来灵感把它改成了查错程序
页: 1 [2] 3
查看完整版本: 代码查错程序,源码