程序局部变量问题
本帖最后由 菜卷鱼 于 2015-11-5 14:24 编辑像(rtos number ]) , mode 跟 precision 这两个变量爱填不填,函数都能使用,这种效果怎么弄出来的?
根据两位大神的回答,那我只能把程序这样弄了
用来测试的程序是用来排序的,论坛里有很多这种功能的,不过我这个跟他们的有点不一样
;(vla-sort 选择集 属性名称 排序方式) 举例(vla-sort ss 'EffectiveName > )按块名排序
;假如排序属性是列表的话
;(vla-sort 选择集‘(属性名称要比较的第几个位置) 排序方式) 举例 (vla-sort ss’(InsertionPoint 1)< )按插入点排序,1是X,2是Y ,3是Z坐标(defun vla-sort(ss mark syb / ns sl)
(setqns (ssadd) sl nil)
(setq i -1)
(repeat (sslength SS)
(setq sl (cons (ssname SS (setq i (1+ i))) sl))
)
(cond
((= (type mark) 'SYM)
(setqsl
(vl-sort
sl
(function
(lambda (X Y)
(Syb
(vlax-get (vlax-ename->vla-object X)mark)
(vlax-get (vlax-ename->vla-object Y)mark)
)
)
)
)
)
)
((= (type mark) 'LIST)
(setqsl
(vl-sort
sl
(function
(lambda (X Y)
(Syb
(NTH (1- (CADR mark)) (vlax-get (vlax-ename->vla-object X) (car mark)))
(NTH (1- (CADR mark)) (vlax-get (vlax-ename->vla-object Y) (car mark)))
)
)
)
)
)
))
(foreach x sl (setq ns (ssadd x ns)))
) 这是内部定义的函数,是用C++做出来的。 你这个问的应该叫函数的可选参数,目前lisp的自定义函数是直接无法解决的。
可以采用表传递的方式来控制可选参数,也就是说自定义函数后面是表。
也可以参考不死猫的帖子。
如果非要和rtos 这样的函数类似,就必须通过c++的arx或c#.net,vb.net来自定义内部函数。
arx版本不限,.net只有2007之上才可以,06没有自定义lisp函数功能。
简单说说.net定义可选参数的原型,也是将函数后面的所有参数作为一个数组(可以理解为表)传递给函数内部计算。其实和用lisp自定义函数的表是一个道理。只不过多了表这个括号。
好贴,虽然不懂讲的是啥,但是感觉学习了。
页:
[1]