zhangrunze 发表于 2025-5-10 11:09:22

本帖最后由 zhangrunze 于 2025-5-10 11:23 编辑

蛮不错的工具,感谢分享。
请教下,“defun 子函数” 在代码“defun c:主函数” 中作用于“defun c:主函数”中,还是作用于全局所有主函数?其他主函数也可以用“defun 子函数”?


“defun 子函数”作用域是全局还是就在“defun c:主函数”中?

fangmin723 发表于 2025-5-10 16:53:32

本帖最后由 fangmin723 于 2025-5-10 16:55 编辑

zhangrunze 发表于 2025-5-10 11:09
蛮不错的工具,感谢分享。
请教下,“defun 子函数” 在代码“defun c:主函数” 中作用于“defun c:主函数 ...
这个需要分情况,如果子函数名在主函数的局部变量中,那就作用在“defun c:主函数”中,否则,当主函数运行一次过后,将作用于全局

jake2017 发表于 2025-5-10 18:16:48

谢谢大师分享!

zhangrunze 发表于 2025-5-11 20:23:20

fangmin723 发表于 2025-5-10 16:53
这个需要分情况,如果子函数名在主函数的局部变量中,那就作用在“defun c:主函数”中,否则,当主函数运 ...

感谢指明方向,百度了下~
看看可以这样理解是否正确???
通过变量名的设置决定是否作用于全局;

函数的作用域取决于其定义方式。
(defun c:tt (/ bb-dxf)
    (defun BB-DXF ()
      ; 函数体
    )
)由于bb-dxf被列在c:tt函数的局部变量表中(即/ bb-dxf),它将被限定为c:tt函数的局部函数;只能在c:tt函数内部调用bb-dxf在c:tt函数执行结束后,bb-dxf会被释放,无法在其他函数或全局环境中调用。
虽然defun通常用于定义全局函数,但此处因bb-dxf被显式声明为局部变量,其作用域被强制限制。;若需让bb-dxf成为全局函数,应移除局部变量声明:
(defun c:tt ()
    (defun BB-DXF ()
      ; 函数体
    )
)此时bb-dxf会成为全局函数,可在其他位置调用;


fangmin723 发表于 2025-5-12 10:43:39

zhangrunze 发表于 2025-5-11 20:23
感谢指明方向,百度了下~
看看可以这样理解是否正确???
通过变量名的设置决定是否作用于全局;


理解正确
页: 1 [2]
查看完整版本: Lisp函数已定义的局部变量获取和去重