函数套函数中的选择问题
(DEFUNc:A1 (/ ss )(SETQ SS (SSGET));用这个选择集
(setq err (vl-catch-all-apply 'hs-autoDim (list nil)))
(C:Y)
)
怎么将A1中的 定义的sst选择集,应用到以下的所有的子函数中去,不用重复选择
---------------------------------------------------
(DEFUN C:Y()
(setq err (vl-catch-all-apply 'hs-autoDim (list nil)))
)
此处引用hs-autoDim函数
---------------------------------------------------
---------------------------------------------------
(defun hs-autoDim (jianxiang/ ss)
(setq maxbox (hs-maxbox ss)))
此处引用hs-maxbox函数 选择集用 A1中的ss
---------------------------------------------------
---------------------------------------------------
(defun hs-maxbox (ss /lst ll ur s1p minx miny maxx maxy x)
(setq lst (HS-SS->LIST ss))
此处引用HS-SS->LIST函数 选择集用 A1中的ss
---------------------------------------------------
---------------------------------------------------
(defun hs-ss->list (ss / n i lst s1)
(setq n (sslength ss))
此处sslength选择集用 A1中的ss
)
---------------------------------------------------
先按照逻辑全部写成一个函数,这lisp基础就用子函数,子函数还就一句话,意义何在? 这是引用自定义函数的问题吧(defun c:a1 (/ ss )
(setq ss (ssget));用这个选择集
(setq err (vl-catch-all-apply 'hs-autoDim (list SS)))
)
(defun hs-autoDim (ss/ maxbox)
(setq maxbox (hs-maxbox ss))
)
(defun hs-maxbox (ss /lst ll ur s1p minx miny maxx maxy x)
(setq lst (HS-SS->LIST ss))
)
(defun hs-ss->list (ss / n i lst s1)
(setq n (sslength ss))
(print n)
(princ)
) kozmosovia 发表于 2024-10-28 20:19
先按照逻辑全部写成一个函数,这lisp基础就用子函数,子函数还就一句话,意义何在?
我省略了很多没复制 我需要的是怎么把我在主程序中的选择集ss应用到,其他的子函数中去 其他的自定义函数都在y这个命令中。 caoyongjun 发表于 2024-10-29 07:28
我需要的是怎么把我在主程序中的选择集ss应用到,其他的子函数中去
主程序返回ss,那么你就可以应用到其它函数了。 (defun hs-autoDim (jianxiang/ ss) 此处不写ss呢? 除了(defun hs-autoDim (jianxiang/ ss)去掉ss,其他照参数传 本帖最后由 llsheng_73 于 2024-11-3 15:18 编辑
如果后边这些函数都只是为前边的服务,别的地方不会调用它们,可以去掉它们的参数,直接引用调用它们的地方定义的变量,让局部变量成为范围内全局变量使用,不会成为真正的全局变量
(defun c:tt(/ a b c)
(and(setq a(getreal))
(setq b(getreal))
(setq c(getreal))
(t1)
(t2)
(t3)))
(defun t1()
(>(+ a b)c))
(defun t2()
(>(+ a c)b))
(defun t3()
(>(+ b c)a))
这是比较偷懒的做法,如果后续那些函数过程中不会修改参数变量,这样做也没什么不可以,但容易形成不好的习惯,正确的做法是,把引用到的变量都设置成参数,
(defun c:tt(/ a b c)
(and(setq a(getreal))
(setq b(getreal))
(setq c(getreal))
(t1 a b c)
(t2 a b c)
(t3 a b c)))
(defun t1(i j k / a)
(setq a(>(+ i j)k)))
(defun t2(l m n / b)
(setq b(>(+ l n)m)))
(defun t3(d e f)
(>(+ e f)d))
页:
[1]
2