在线时间 13 小时 最后登录 2013-12-8 注册时间 2010-5-13 听众数 3 收听数 0 能力 0 分 体力 399 点 威望 11 点 阅读权限 30 积分 282 相册 0 日志 0 记录 0 帖子 97 主题 45 精华 0 分享 0 好友 1
升级 91%
TA的每日心情 难过 2012-8-27 18:22
签到天数: 1 天
[LV.1]初来乍到
Forcal中,通常模块变量要先声明,后使用。例如:init(::a,b,c)= a=11, b=22, c=33; //模块变量赋初值# ]$ t* N* g1 c7 N
f(x::a,b,c)=x+a+b+c; //函数f中使用了模块变量5 O0 J2 ]: e( x% l0 F
f(1); //函数调用 复制代码 结果:1 b( W: j; x8 T
67./ F$ V; k* _0 a# h; M
" |) d% t @) x5 q: V 当使用编译符mvar时,未声明的变量均看作模块变量,故前面的例子可写成:mvar:/ |: n# D) I) |) P( T: M
a=11, b=22, c=33; //模块变量赋初值$ p7 z& a& d4 Y9 g4 d8 w
f(x)=x+a+b+c; //函数f中使用了模块变量: h2 t3 x2 G5 H% E/ ?3 l: ^) w/ Q
f(1); //函数调用 复制代码 结果:2 N' h4 B, b) k" b; D C0 w
67.
+ X4 K9 m5 Q0 S0 `. s* X P / R) Z3 w# ? T, R' ?/ i
这样看起来似乎不错,的确,在简单的程序中,这样写代码很简洁方便。不过,在复杂的程序中却不推荐使用编译符mvar,因为它常常会隐藏一些人为的错误,例如下面的代码通过了编译,但--看看你的眼力,能否发现其中的错误?mvar:& s' z5 K5 t! k! W+ B4 O
a=11, b=22, c=33; //模块变量赋初值3 H3 J6 \4 e0 k* r! s# n2 M9 w
f(x)=x+a+d+c; //函数f中使用了模块变量9 z, }\" e$ A1 l# h9 m z+ g4 A
f(1); //函数调用 复制代码 若显示地声明模块变量,编译器会帮你发现这个错误:init(::a,b,c)= a=11, b=22, c=33; //模块变量赋初值# y* A. T3 t+ ]
f(x::a,b,c)=x+a+d+c; //函数f中使用了模块变量
* W! s. c) u9 k\" a! c1 _0 d4 e f(1); //函数调用 复制代码 故复杂的程序中,慎用编译符mvar。
zan