yu960312 发表于 2023-12-27 03:31:53

关于批量定义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 13:59:34

本帖最后由 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

jun353835273 发表于 2023-12-27 08:58:49

要字符串形式 然后eval

jun353835273 发表于 2023-12-27 09:10:38

(setq count 0)
(setq func-name (strcat "C:F" (itoa count)))
(setq func (strcat"(alert "        "\" abc \""          ")"))
(eval (read (strcat "(defun " func-name "()   ("func"))")))

lijiao 发表于 2023-12-27 12:21:34

'(alert (strcat "C:F" (itoa count) " !!!"))
改为
(list 'alert (strcat "C:F" (itoa count) " !!!"))

llsheng_73 发表于 2023-12-27 13:16:33

本帖最后由 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)))))

yu960312 发表于 2023-12-27 20:04:21

jun353835273 发表于 2023-12-27 09:10


感谢大神解惑,又学了一招

yu960312 发表于 2023-12-27 20:05:31

lijiao 发表于 2023-12-27 12:21
'(alert (strcat "C:F" (itoa count) " !!!"))
改为
(list 'alert (strcat "C:F" (itoa count) " !!!"))

感谢大神解惑:handshake

yu960312 发表于 2023-12-27 20:07:00

llsheng_73 发表于 2023-12-27 13:16
'(alert (strcat "C:F" (itoa count) " !!!"))导致定义函数的时候,其后的所有运算均不会进行,到了运行的 ...

magicheno 发表于 2023-12-28 12:34:07

感谢大佬分享
页: [1]
查看完整版本: 关于批量定义C:xx函数的疑问