Perifanos 发表于 2022-7-6 06:52:07

这个代码有什么问题?

(defun C:最热()
(Princ“定义区域:”)
(命令“区域”)
 
(while(=1(getvar“cmdactive”))
(命令暂停)
)
(setq A(getvar“区域”))
(原理A)
 
)

Lee Mac 发表于 2022-7-6 07:05:44

首先,请阅读代码发布指南,了解如何在帖子中设置代码格式的说明,并根据需要编辑帖子。
 
我在你的代码中没有看到任何会导致错误的东西,但是,有可能是你无意中将暂停符号重新定义为“\\”以外的其他符号,并且你也没有将符号a声明为局部变量(有关变量本地化的更多信息,请参阅我的教程)。
 
下面是编写代码的另一种方法:
(defun c:heatest ( )
   (command "_.area")
   (while (< 0 (getvar 'cmdactive))
       (command "\\")
   )
   (princ (getvar 'area))
   (princ)
)

Perifanos 发表于 2022-7-6 07:17:01

(defun c:heatest (/ a)
   (command "_.area")
   (while (< 0 (getvar 'cmdactive))
       (command "\\")
   )
   (princ "Area:" (getvar 'area))

)
 
 
我刚刚复制/粘贴了上面的代码,在princ后面添加了一个字符串。
 
我得到这个错误:;错误:错误的参数类型:文件
 
我真的不知道怎么了。

Perifanos 发表于 2022-7-6 07:25:47

(defun c:heatest (/a)
(setq a 10)
(princ a)
)
 
如果前一个很难,读这一个。。。我也有同样的错误。。。

David Bethel 发表于 2022-7-6 07:26:54

系统变量区域存储为实数。
 
你可以:
 
(prin1。。。

(普林斯(rtos。。。
 
-大卫

Perifanos 发表于 2022-7-6 07:39:30

那么这有什么错呢
 
(defun c:heatest ()
(setq a 10 b 20)
(princ (a b))
(princ)
)

fixo 发表于 2022-7-6 07:44:28

伙计,你读过列表函数吗?
我很想知道
我推荐你从这里开始
www.afralisp。网
尝试

(setq a 10 b 20)
(princ (list a b))
(terpri)
(print (list a b))
(terpri)
(princ (vl-princ-to-string (list a b)))

Lee Mac 发表于 2022-7-6 07:59:51

 
这是错误的来源:
 
 
出于某种原因,您还取消了对普林斯的最后通话。
 
princ函数接受两个可选参数:要打印到命令行或文件的字符串和文件描述符(如果打印到文件)。
 
您提供了字符串“Area:”作为第一个参数,(getvar'Area)作为第二个参数。然而,(getvar’area)并不像princ对第二个参数所期望的那样是一个文件描述符,因此出现了错误。
 
要打印字符串“Area:”,后跟(getvar’Area)的值,您需要使用rtos函数将面积值转换为字符串,然后使用strcat连接两个字符串;或使用单独的princ表达式打印面积值:
 
(defun c:heatest ( / a )
   (command "_.area")
   (while (< 0 (getvar 'cmdactive))
       (command "\\")
   )
   (princ (strcat "Area:" (rtos (getvar 'area))))
   (princ)
)
至于您的其他帖子,我建议您先阅读AutoLISP文档,并访问几个AutoLISP教程站点,以确定错误的原因。
页: [1]
查看完整版本: 这个代码有什么问题?