init(::a,b,c)= a=11, b=22, c=33; //模块变量赋初值 j( w' U) o! g. c
f(x::a,b,c)=x+a+b+c; //函数f中使用了模块变量 5 i3 n4 R h% U T3 W. E
f(1); //函数调用
复制代码
结果:% F- M; d/ j' k% O' J; ^
67. 2 F9 e; Y3 @, R s% x p+ N% o( e- O1 w
当使用编译符mvar时,未声明的变量均看作模块变量,故前面的例子可写成:
mvar: }$ m u7 ~9 H. h% e( b
a=11, b=22, c=33; //模块变量赋初值. u' u* P9 G: i
f(x)=x+a+b+c; //函数f中使用了模块变量 , K% I$ a* }9 X# J
f(1); //函数调用
复制代码
结果:6 H6 L+ N$ A' a6 c+ T7 n, [
67.( H ~! z* w; |% `/ E
& y+ F, b) c9 _6 b
这样看起来似乎不错,的确,在简单的程序中,这样写代码很简洁方便。不过,在复杂的程序中却不推荐使用编译符mvar,因为它常常会隐藏一些人为的错误,例如下面的代码通过了编译,但--看看你的眼力,能否发现其中的错误?