mahuan1279 发表于 2024-11-12 15:11:26

本帖最后由 mahuan1279 于 2024-11-12 15:14 编辑

递归的BUG很多……

(defun choose_insert ()
(princ "\n***必须选择属性块!***")
(if (setq a (entsel))
    (progn (setq b (vlax-ename->vla-object (car a)))
         (if (= (vla-Get-ObjectName b) "AcDbBlockReference")
             (if (= (vla-Get-HasAttributes b) :VLAX-TRUE)
               (princ "ok")
               (choose_insert)
             )
             (choose_insert)
         )
    )
    (choose_insert)
)
b
)

烟盒迷唇 发表于 2024-11-12 16:51:28

递归没搞过,不清楚状况!

kozmosovia 发表于 2024-11-12 17:14:24

(defun choose_insert (/ blk)
(terpri)
(while (not
           (and        (setq blk (car (entsel "\r***必须选择属性块!***")))
                (equal (cdr (assoc 66 (entget blk))) 1)
           )
       )
)
blk
)

dcl1214 发表于 2024-11-12 21:54:43

要理解代码,否则,不要玩递归,递归在很多语言里面是被诟病的一种写法

dcl1214 发表于 2024-11-12 22:04:57

本帖最后由 dcl1214 于 2024-11-12 22:07 编辑

(defun choose_insert (/ e ents go obj pick)
(setq go t)
(setq ents nil)
(setq i 1)
(while (and go (<= i 2))
    (setq pick (vl-catch-all-apply 'entsel (list "必须选择属性块")))
    (if      (vl-catch-all-error-p pick)
      (progn (setq go nil)
             (setq pick nil)
             (alert "按下了键盘esc,程序退出了")
      )
    )
    (and (setq e (car pick))
         (setq obj (vlax-ename->vla-object e))
    )
    (if      (and obj
             (= (vla-Get-ObjectName obj) "AcDbBlockReference")
             (= (vla-Get-HasAttributes obj) :VLAX-TRUE)
      )
      (progn (setq ents (cons e ents)) (setq go nil))
    )
    (setq i (1+ i))
    (if      (> i 2)
      (alert "给了您2次机会了,还是没选中,赶快将鼠标扔了")
    )
    (print)
)
ents
)

明明有最简单的写法,非要搞最垃圾的写法

gaics 发表于 2024-11-13 08:34:39

dcl1214 发表于 2024-11-12 21:54
要理解代码,否则,不要玩递归,递归在很多语言里面是被诟病的一种写法

以后不玩了,哈哈

mahuan1279 发表于 2024-11-13 12:03:07

gaics 发表于 2024-11-13 08:34
以后不玩了,哈哈

递归里尽量不要出现等价转换,要原汁原味…

yefei812678 发表于 2024-11-14 08:28:57

谢谢分享谢谢分享谢谢分享谢谢分享

chslwj521 发表于 2024-11-14 09:22:10

dcl1214 发表于 2024-11-12 22:04
明明有最简单的写法,非要搞最垃圾的写法

杜总威武:lol,加上一句:这手也是帕金森,赶紧吃药吧:lol

llsheng_73 发表于 4 天前

gaics 发表于 2024-11-12 13:12
未选中属性快则继续选。

(defun tt(/ e)
(while(not(setq e(ssget":E:S"'((0 . "insert")(66 . 1))))))
e)
页: 1 [2]
查看完整版本: 帮忙找下if语句的bug