早上好
除了克林特指出的,让我向你们展示一些你们可能不清楚的潜在错误。
测试此代码:
- ([color="blue"]if[/color] ([color="blue"]setq [/color]objs ([color="blue"]ssadd[/color]))
- ([color="blue"]alert [/color][color="magenta"]"Variable objs has values"[/color])
- ([color="blue"]alert [/color][color="magenta"]"Variable objs doesn't have any value"[/color])
- )
上述代码永远不会返回nil,因为函数ssadd总是有一个值,您可能会认为它只是一个变量声明,如果实体名称与您的条件匹配,则向其添加实体名称,因此您在项目中的语句(如果objs….永远不会等于nil,这被认为是获得代码预期结果的错误且不正确的方法。
因此,在这种情况下,您需要检查变量“objs”的值是否不止一个,因为函数ssadd的第一次返回将有一个选择集。
包含在cond函数中的代码永远不会返回nil,因为变量“blkname”的值是原始块名(字符串类型),因此永远不会到达cond函数的下一个表达式。
- (([color="blue"]not [/color]blkname) ......
foreach函数中包含以下代码,这意味着只有第一个边界框将正确绘制到其位置,其余边界框不会正确绘制到其位置,因为系统变量OSMODE将返回到其原始设置。
- (mapcar '[color="blue"]setvar [/color]vlst ovar)
最后一件需要注意的事情是,当您检查块名称时,您已经拥有了vla对象,因此只需将实体名称的vla对象添加到变量中,而不是使用ssnamex函数再次检索它们,ssnamex函数是相同对象的额外迭代,您可以不用它。
希望这不会让你失望,但会鼓励你在下一个项目中意识到它们。
快乐的编码。 |