关于批量定义C:xx函数的疑问
如下三个函数需要批量定义[*](defun C:F1()
[*](alert "C:F1 !!!")
[*](princ)
[*])
[*]
[*](defun C:F2()
[*](alert "C:F2 !!!")
[*](princ)
[*])
[*]
[*](defun C:F3()
[*](alert "C:F3 !!!")
[*](princ)
[*])
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[*](defun C:DEF()
[*](setq count 0)
[*](repeat 3
[*](setq count (1+ count))
[*](setq func-name (strcat "C:F" (itoa count)))
[*](eval
[*](list 'defun-q (read func-name) '()
[*]'(alert (strcat "C:F" (itoa count) " !!!"))
[*]'(princ)
[*])
[*])
[*])
[*](princ)
[*])
用以上代码批量定义就会出错,求各位大佬指点一下
C:F1 C:F2 C:F3都是提示 C:F3 !!!
本帖最后由 wzg356 于 2023-12-27 14:00 编辑
(setq cfxx '(defun-q C:FXX()(alert "C:FXX !!!")));定义
;这样写易读性强一些
;(eval cfxx);加载
(foreach x '("C:F1" "C:F2" "C:F3")
(setq cfxx0 (vl-prin1-to-string cfxx))
;里面的字符串大小写不变,其余均大写
(while(vl-string-search "C:FXX" cfxx0)
(setq cfxx0(vl-string-subst x "C:FXX" cfxx0))
);修改
(eval(read cfxx0));加载
);重定义并加载了C:F1 C:F2 C:F3 要字符串形式 然后eval (setq count 0)
(setq func-name (strcat "C:F" (itoa count)))
(setq func (strcat"(alert " "\" abc \"" ")"))
(eval (read (strcat "(defun " func-name "() ("func"))")))
'(alert (strcat "C:F" (itoa count) " !!!"))
改为
(list 'alert (strcat "C:F" (itoa count) " !!!")) 本帖最后由 llsheng_73 于 2023-12-27 13:20 编辑
'(alert (strcat "C:F" (itoa count) " !!!"))导致定义函数的时候,其后的所有运算均不会进行,到了运行的时候,才会取相应的变量值按设定的方式进行处理
(defun C:DEF()
(setq count 0)
(repeat 3
(setq count (1+ count))
(setq func-name (strcat "C:F" (itoa count)))
(eval(List 'defun-q (read func-name)nil
(list 'alert(strcat"C:F"(itoa count)"!!!!!"))
'(princ))))) jun353835273 发表于 2023-12-27 09:10
感谢大神解惑,又学了一招 lijiao 发表于 2023-12-27 12:21
'(alert (strcat "C:F" (itoa count) " !!!"))
改为
(list 'alert (strcat "C:F" (itoa count) " !!!"))
感谢大神解惑:handshake llsheng_73 发表于 2023-12-27 13:16
'(alert (strcat "C:F" (itoa count) " !!!"))导致定义函数的时候,其后的所有运算均不会进行,到了运行的 ...
感谢大佬分享
页:
[1]