结果:% E. f6 M% K0 T: ], `7 S& J3 G
67. ; g. j# {8 V( X8 { 7 b( H2 p. n: X- m" x当使用编译符mvar时,未声明的变量均看作模块变量,故前面的例子可写成:
mvar:, @, W( J0 n- r0 r
a=11, b=22, c=33; //模块变量赋初值 % X0 R. h- ^ X) q0 y- c( U5 \% v
f(x)=x+a+b+c; //函数f中使用了模块变量 ' L* Q\" x& ~3 b) K' u
f(1); //函数调用
复制代码
结果: , b. Y8 l4 M/ ?- Y. N67. 3 l3 y4 u, j, {; G$ b1 k/ v z- z% D" v0 p1 [# M. o
这样看起来似乎不错,的确,在简单的程序中,这样写代码很简洁方便。不过,在复杂的程序中却不推荐使用编译符mvar,因为它常常会隐藏一些人为的错误,例如下面的代码通过了编译,但--看看你的眼力,能否发现其中的错误?
mvar:. `1 ^6 g/ ^. V( `' q/ \
a=11, b=22, c=33; //模块变量赋初值8 H; S' n( u0 o
f(x)=x+a+d+c; //函数f中使用了模块变量 4 d8 u- f. ~3 B
f(1); //函数调用
复制代码
若显示地声明模块变量,编译器会帮你发现这个错误:
init(::a,b,c)= a=11, b=22, c=33; //模块变量赋初值 ! A' w& u! k5 K
f(x::a,b,c)=x+a+d+c; //函数f中使用了模块变量0 K* ^. Y/ i% t2 C; i