CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2021 开发者帮助

关于带参数的函数 (AutoLISP)

2024-5-18 18:28| 发布者: admin| 查看: 18| 评论: 0|原作者: admin|来自: AutoCAD

关于带参数的函数 (AutoLISP)

使用 AutoLISP,许多函数都需要向它们传递值。这些值称为参数。

有些函数也不接受任何参数,而有些函数接受可选参数。用户定义的函数不能具有可选参数。调用接受参数的用户定义函数时,必须为所有参数提供值。

注意:您可以定义多个具有相同名称的用户函数,但每个定义接受不同数量或类型的参数。

用作参数的符号在参数列表中的局部变量之前定义。参数被视为一种特殊类型的局部变量;参数变量在函数外部不可用。不能定义具有多个同名参数的函数。

如果对多个参数使用相同的名称,则在AutoCAD命令提示符下显示以下错误消息:

重复参数名称:

下面的代码定义一个接受两个参数的函数。该代码要求参数都属于字符串数据类型。参数被组合并作为结果字符串返回。

(defun ARGTEST ( arg1 arg2 / ccc )
  (setq ccc "Constant string")
  (strcat ccc ", " arg1 ", " arg2)
)
ARGTEST

该函数返回所需的值,因为 AutoLISP 始终返回它计算的最后一个表达式的结果。最后一行用于连接字符串,并返回结果值。这是一个示例,您不应该使用该函数来禁止显示程序中的返回值。ARGTESTARGTESTstrcatprinc

这种类型的函数可以在应用程序中多次使用,以按特定顺序将两个变量字符串与一个常量字符串组合在一起。由于它返回一个值,因此您可以将该值保存到变量中,以便稍后在应用程序中使用。

(setq newstr (ARGTEST "String 1" "String 2"))
"Constant string, String 1, String 2"

该变量现在设置为三个字符串组合的值。newstr

请注意,该变量是在函数中本地定义的。函数运行完成后,AutoLISP 将重新捕获分配给变量的内存。可以使用以下代码检查分配给 的值。ccc ARGTESTccc

!ccc
nil

如果未将字符串值传递给函数,则该函数将返回以下错误:ARGTESTstrcat

;错误:参数类型错误:stringp 1

可以使用 type 函数来验证参数的数据类型并做出相应的响应。该函数还有助于捕获函数返回的错误。下面的示例代码使用该函数来确保在尝试合并并返回生成的字符串之前向函数传递了两个字符串值。vl-catch-apply-allstrcattypeARGTEST

(defun ARGTEST (arg1 arg2 / ccc retVal)
  (setq ccc "Constant string")

  (if (= (type arg1) 'STR)
    (if (= (type arg2) 'STR)
      (setq retVal (strcat ccc ", " arg1 ", " arg2))
      (prompt "bad argument: arg2 not a string\n")
    )
    (prompt "bad argument: arg1 not a string\n")
  )
  (if retVal
    retVal
    (princ)
  )
)

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-6-27 15:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部