wjl1014 发表于 2013-6-6 09:20:29

关于变量的作用范围

子函数作为主函数的一个变量出现在主函数内部时,子函数的变量是否只作用于子函数内部?

Gu_xl 发表于 2013-6-6 09:35:26

如果变量名申明在 / 后面,该变量的作用范围只在该子函数范围,否则就是全局变量!
请看示例:(defun c:tt (/ a)
(defun tt (/ a)
    (setq a "\n我是函数 tt 的局部变量") ;_ tt函数局部变量赋值
    (princ a)
    )
(setq a "\n我是函数 c:tt 的局部变量") ;_ c:tt函数局部变量赋值
(tt)
(princ a)
(princ)
)
命令: tt
我是函数 tt 的局部变量
我是函数 c:tt 的局部变量
命令:

wjl1014 发表于 2013-6-6 10:10:41

Gu_xl 发表于 2013-6-6 09:35 static/image/common/back.gif
如果变量名申明在 / 后面,该变量的作用范围只在该子函数范围,否则就是全局变量!
请看示例:命令: tt
我 ...

多谢Gu_xl。

Throne 发表于 2014-2-9 17:15:11

Gu_xl 发表于 2013-6-6 09:35 static/image/common/back.gif
如果变量名申明在 / 后面,该变量的作用范围只在该子函数范围,否则就是全局变量!
请看示例:命令: tt
我 ...

又搜索到G版的答疑,谢谢

Throne 发表于 2014-2-9 19:30:01

本帖最后由 Throne 于 2014-2-9 19:32 编辑

Gu_xl 发表于 2013-6-6 09:35 static/image/common/back.gif
如果变量名申明在 / 后面,该变量的作用范围只在该子函数范围,否则就是全局变量!
请看示例:命令: tt
我 ...(defun c:tt ()
(defun tt (b)
    (setq b "\n我是函数 tt 中的 b")

)
(setq bb "\n我是函数 c:tt 中的bb")
(tt bb)
(princ b)         ;      nil
(princ)
)

自己又测试了一下,有点疑问
请教一下 (princ b)中的b为什么是未定义啊?是不是子函数的形参从作用域范围上来讲跟子函数的局部变量一样?不知道G版能否看到*****

ZZXXQQ 发表于 2014-2-10 08:37:24

变量b是函数tt的假变量,在函数tt结束后不存在。
应该直接(princ (tt bb))
因为tt函数的返回值就是变量b的内容。
页: [1]
查看完整版本: 关于变量的作用范围