明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 447|回复: 9

[提问] 关于批量定义C:xx函数的疑问

[复制链接]
发表于 2023-12-27 03:31 | 显示全部楼层 |阅读模式
如下三个函数需要批量定义

  • (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 !!!






发表于 2023-12-27 13:59 | 显示全部楼层
本帖最后由 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
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-27 08:58 | 显示全部楼层
要字符串形式 然后eval
发表于 2023-12-27 09:10 | 显示全部楼层
  1. (setq count 0)
  2. (setq func-name (strcat "C:F" (itoa count)))
  3. (setq func (strcat  "(alert "          "" abc ""            ")"))
  4. (eval (read (strcat "(defun " func-name "()   ("  func  "))")))
发表于 2023-12-27 12:21 | 显示全部楼层
'(alert (strcat "C:F" (itoa count) " !!!"))
改为
(list 'alert (strcat "C:F" (itoa count) " !!!"))
发表于 2023-12-27 13:16 | 显示全部楼层
本帖最后由 llsheng_73 于 2023-12-27 13:20 编辑

'(alert (strcat "C:F" (itoa count) " !!!"))导致定义函数的时候,其后的所有运算均不会进行,到了运行的时候,才会取相应的变量值按设定的方式进行处理
  1. (defun C:DEF()
  2.   (setq count 0)
  3.   (repeat 3
  4.     (setq count (1+ count))
  5.     (setq func-name (strcat "C:F" (itoa count)))
  6.     (eval(List 'defun-q (read func-name)nil
  7.                (list 'alert(strcat"C:F"(itoa count)"!!!!!"))
  8.                '(princ)))))
 楼主| 发表于 2023-12-27 20:04 | 显示全部楼层

感谢大神解惑,又学了一招
 楼主| 发表于 2023-12-27 20:05 | 显示全部楼层
lijiao 发表于 2023-12-27 12:21
'(alert (strcat "C:F" (itoa count) " !!!"))
改为
(list 'alert (strcat "C:F" (itoa count) " !!!"))

感谢大神解惑
 楼主| 发表于 2023-12-27 20:07 | 显示全部楼层
llsheng_73 发表于 2023-12-27 13:16
'(alert (strcat "C:F" (itoa count) " !!!"))导致定义函数的时候,其后的所有运算均不会进行,到了运行的 ...

发表于 2023-12-28 12:34 | 显示全部楼层
感谢大佬分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 17:48 , Processed in 0.197051 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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