明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1489|回复: 13

[提问] 用字符串为子程序变量调用的问题

[复制链接]
发表于 2013-10-25 09:20 | 显示全部楼层 |阅读模式
子程序是实现设置当前图层的 下面是子程序
(defun var_set (/ a b)
(setq ts (tblsearch "layer" "a"))
(if (null ts)
(command "layer" "m" "a" "c" "b" "a" "")
(command "layer" "s" "a" "")
)

现在我想调用这个子程序时 比如图层名为Masonry 颜色为8 那么要这样写呢? (var_set Masonry 8) 好像不行
发表于 2013-10-25 09:33 | 显示全部楼层
(defun var_set (/ a b)这里并没有给它指定需要任何参数而只是说明了两个局部变量,当然(var_set Masonry 8)就不行
如果需要那样,(defun var_set (/ a b)得改成(defun var_set (a b)
 楼主| 发表于 2013-10-25 09:41 | 显示全部楼层
llsheng_73 发表于 2013-10-25 09:33
(defun var_set (/ a b)这里并没有给它指定需要任何参数而只是说明了两个局部变量,当然(var_set Masonry  ...

谢谢 调用的时候还是用(var_set Masonry 8) 吗? 试了一下还是不行

点评

应该输入字符串吧?  发表于 2013-10-25 09:45
 楼主| 发表于 2013-10-25 09:51 | 显示全部楼层
peraperson 发表于 2013-10-25 09:41
谢谢 调用的时候还是用(var_set Masonry 8) 吗? 试了一下还是不行

什么意思呢? 我希望主程序就只有这一句(var_set Masonry 8)  要修改的在子程序里 有什么办法呢
发表于 2013-10-25 09:54 | 显示全部楼层
peraperson 发表于 2013-10-25 09:51
什么意思呢? 我希望主程序就只有这一句(var_set Masonry 8)  要修改的在子程序里 有什么办法呢

8 写成"8"如何?
发表于 2013-10-25 09:58 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-10-25 10:10 编辑
peraperson 发表于 2013-10-25 09:51
什么意思呢? 我希望主程序就只有这一句(var_set Masonry 8)  要修改的在子程序里 有什么办法呢

    额,看样子你对参数在概念上还有点混乱。。。
你把需要给子程序的参数先确定好,再把命令中是参数的地方用成变量形式,不能用""把它们弄成直接的字符了,那样CAD的COMMAND命令会直接把"a"作为命令的参数而不是把你给a这个变量所赋的值娄成命令参数。。

具体该怎么写我也不清楚,我对CAD的很多命令的命令行参数都不太清楚,也很少用它,因为它太讨厌,总会因为版本而对参数顺序进行一些小调整,而让程序无法通用,所以我一般刻意避免了使用COMMAND。同时我所用CAD版本也许和你的不一样,就算我帮你调试了这个命令,那也是在我所用这个CAD版本上能通过,至于在你那能不能行得通,那就说不好了,所以最终还得你自己去调试它
可以给你写个简单点的例子

(defun mycir1(p r)
(command"_CIRCLE" P r) ;;;(command"_CIRCLE" P "r")这样是错的,"r"不会成为一个有效的参数
)

(setq p(list 1 2 0) r 5)
(mycir p r)
(mycir (list 1 2 0) 5);;这两种调用都应该没问题


发表于 2013-10-25 10:00 | 显示全部楼层
  1. ;; (var_set "Masonry" 8)
  2. (defun var_set (la co)
  3.   (if (null (tblsearch "layer" la))
  4.     (command "layer" "m" la "c" co la "")
  5.     (command "layer" "s" la "")
  6.   )
  7. )

点评

我想了一下 如果按照上面的方法 子程序就变成了 (defun var_set ("Masonry" 8) ....) 这样一来子程序的变量就是一个字符串了 这样是可以的吗 问题是不是出在这?  发表于 2013-10-25 11:27
好像还是不行 (var_set "Maonry" 8) (var_set "Maonry" "8") 和(var_set Maonry "8")都试过了的  发表于 2013-10-25 10:24
学院派一出手就是正解,膜拜  发表于 2013-10-25 10:13
 楼主| 发表于 2013-10-25 10:07 | 显示全部楼层
本帖最后由 peraperson 于 2013-10-25 10:19 编辑
xyp1964 发表于 2013-10-25 10:00

好像还是不行
(回复 xyp1964 恩恩 带了的 还是不行 (var_set "Maonry" 8) (var_set "Maonry" "8") 和(var_set Maonry "8")都试过了的)

点评

(var_set "Masonry" 1) 注意用半角括号  发表于 2013-10-25 10:47
图层名要带双引号 ""  发表于 2013-10-25 10:14
 楼主| 发表于 2013-10-25 10:08 | 显示全部楼层
自贡黄明儒 发表于 2013-10-25 09:54
8 写成"8"如何?

还是不行
 楼主| 发表于 2013-10-25 10:10 | 显示全部楼层
llsheng_73 发表于 2013-10-25 09:58
你把需要给子程序的参数先确定好,再把命令中是参数的地方用成变量形式,不能用""把它们弄成直接的字符了 ...

似懂非懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-2 05:07 , Processed in 0.168075 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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