QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2003|回复: 4
收起左侧

[求助] 问个简单的lisp问题

[复制链接]
发表于 2008-9-26 10:02:52 | 显示全部楼层 |阅读模式 来自: 中国北京

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
正在学习,看到里面有全局变量和局部变量的名称,这两个有什么直观区别?如果说区别是其值一个消失,一个仍然存在就别解释了,我就是看不懂这个意思才问的。
发表于 2008-9-26 13:44:10 | 显示全部楼层 来自: 中国辽宁营口
打个比方
9 k0 R7 p1 i& s; j( H你的单位有领导,别的单位也有领导,大家都是领导,但只在自己圈里起作用,出了圈子就什么都不是,你单位的领导相对于中国这个全局来说就是你们单位的局部变量,别的单位领导是别的单位的局部变量.国家主席在全中国都起作用,是中国的全局变量.
 楼主| 发表于 2008-9-26 16:01:40 | 显示全部楼层 来自: 中国北京

回复 2# woaishuijia 的帖子

多谢斑竹这么超常规的解释,能不能举个例子好明白一点的
发表于 2008-9-26 19:56:51 | 显示全部楼层 来自: 中国
先看这段代码2 x- H7 T: v4 \2 `. L
(defun c:aaa()
( }8 C  {6 L1 |, s2 ~) Y% S  (setq v "MMMMMM" ). |. R9 V5 y# Z; V5 l& W8 V' u
  (command "text" "j" "MC" '(0 0) 2.5 0 v)
6 H0 |& P+ W2 q3 \: v# H6 L); V' N, @) k9 _
(defun c:bbb()
) y+ I5 E8 M9 a. S2 W3 P  (command "text" "j" "MC" '(0 5) 2.5 0 v)/ u; O- H1 ]8 [! G
)2 x1 z+ [6 M, G- q
这段代码有两个函数,其中都有变量v。4 t: [2 k* g! f% d* W" d
加载程序后,键入命令“aaa”,图形中会出现单行文字“MMMMMM”。再键入命令“bbb”,图形中会出现另一个单行文字“MMMMMM”,尽管在函数“bbb”中我们并没有给变量v赋值。
# Z* n% w+ }7 r) F. i( w- O6 X  G! B9 x8 t$ g' J  [- q
再看下面代码
2 ?) m4 n, y/ A3 R(defun c:aaa(/ v)
, a5 A  t/ ^4 l) X  (setq v "MMMMMM" )
/ _5 K7 b4 G5 v& S# V' X* y  (command "text" "j" "MC" '(0 0) 2.5 0 v); r- r3 h0 U0 \- N
)
: v- J; V  n6 a* z9 V+ a' V(defun c:bbb(/ v)7 j2 A* c5 X) o8 H6 M+ Y- H  ?9 i6 B
  (command "text" "j" "MC" '(0 5) 2.5 0 v)' M/ e4 R& b( ?/ ^, X1 V1 h& \
)
+ V, B4 B  d: |' ?9 e2 W加载程序后,键入命令“aaa”,图形中会出现单行文字“MMMMMM”。再键入命令“bbb”,什么也没有。
; [0 M; G2 @. u0 F( V; a3 F3 @在前一段代码中,$ }- O; U* |& ~+ f  V& J
v是全局变量,两个函数中的v是同一个变量。在“aaa”函数中v被赋值,在运行“bbb”时被显示的v就是“aaa”中的v。
; J7 A- \, x; w5 V在后一段代码中,两个函数中的v分别被声明为局部变量,每个v都只在自己的函数中存在,互相之间没有任何关系。“aaa”函数中的v在运行“aaa”时被赋值并显示;“bbb”函数中的v在运行时没有被赋值,所以没有显示。$ S5 R. s0 \% S4 C
局部变量和全局变量的区别在于作用域不同。局部变量只在被声明的局部有效,在自己的地盘之外没人认识它;而全局变量则是通用的,到哪都有效。消失不消失只是表面现象。
$ `9 F: m& o! R  p) a8 W- S所谓变量,实质上就是电脑中一个内存地址。第一段代码中的v是全局变量,也就是“aaa”和“bbb”公用的一个地址。运行“aaa”时这个地址被存放了数据“MMMMMM”,运行“bbb”时也到这个地址找数据,当然也显示“MMMMMM”。第二段代码中两个v都是局部变量,“aaa”中的v是“aaa”专用的一个地址,“bbb”中的v是“bbb”专用的一个地址。运行“aaa”时“aaa”的地址被赋值,而“bbb”的地址从来没有被赋值,所以运行“bbb”什么也显示不出来。
( ~" {& `$ q4 r3 H% f9 e! x这么说你应该明白了吧?
发表于 2009-4-10 09:23:58 | 显示全部楼层 来自: 中国北京
真实高手,我都看不懂什么意思?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表