楼主: lastpearl
2231 4

[问答] 请问adv宏的全局变量和局部变量的问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

61%

还不是VIP/贵宾

-

威望
0
论坛币
61 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
403 点
帖子
41
精华
0
在线时间
51 小时
注册时间
2011-11-21
最后登录
2016-9-19

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
执行以下两段程序1.%let mv=shoes;                                                                                                                          
%macro product(td=bicycles);                                                                                                            
%let mv = clothes;                                                                                                                     
%let td = opp;                                                                                                                          
%mend;                                                                                                                                 
%product(td = tens)                                                                                                                     
%put mv is &mv;
结果:mv is clothes
2.%let mv=shoes;                                                                                                                          
%macro product(mv=bicycles);                                                                                                            
%let mv = clothes;                                                                                                                     
%mend;                                                                                                                                 
%product(mv = tens)                                                                                                                     
%put mv is &mv;   
结果:mv is shoes

请问能帮解释下结果吗?对于程序1,mv已经在宏定义之外定义了,在全局变量表中了,为什么结果还是clothes啊
谢谢啦
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Product clothes produc Cycles shoes product shoes 程序

沙发
stayhungry05 发表于 2016-2-1 12:14:02 |只看作者 |坛友微信交流群
程序1 :
MV是global变量,因为MV已经存在了,在宏里面给MV赋值时,是把global 变量MV的值改变了,从shoes 变成了 clothes.

程序2:
在调用product这个宏时,做为参数传递的MV被定义为local变量。这时有两个MV变量,一个global,一个local。在宏里面对MV赋值时只是改变了local 的MV。最后程序%put时,显示是global 变量 的值,所以是shoes。你可以在宏里面加一句  %put mv is &mv, 这个显示结果是mv is clothes

使用道具

藤椅
Tigflanker 发表于 2016-2-1 13:26:14 |只看作者 |坛友微信交流群
我个人理解是:对于globa的宏变量被赋值
在宏中仅可能因为宏变量形式的再赋值而会被改变

第二个宏中的同名宏变量已经被“抢注”为宏参数,而宏参数一定是local范围的,local的操作除了symputx,是无法改变到外界的(call symputx('x','new','g');),就如

  1. %let x = out;

  2. %macro m(x = a);
  3. %let x = nearest;
  4. %put inside &x.;
  5. %mend;

  6. %m(x = c);

  7. %put outside &x.;
复制代码

也是个人理解

使用道具

板凳
lastpearl 发表于 2016-2-1 14:45:59 |只看作者 |坛友微信交流群
stayhungry05 发表于 2016-2-1 12:14
程序1 :
MV是global变量,因为MV已经存在了,在宏里面给MV赋值时,是把global 变量MV的值改变了,从shoes ...
多谢,明白了

使用道具

报纸
lastpearl 发表于 2016-2-1 14:46:36 |只看作者 |坛友微信交流群
Tigflanker 发表于 2016-2-1 13:26
我个人理解是:对于globa的宏变量被赋值
在宏中仅可能因为宏变量形式的再赋值而会被改变
谢谢啦^_^

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 09:11