模块变量及编译符mvar的使用
Forcal中,通常模块变量要先声明,后使用。例如:init(::a,b,c)= a=11, b=22, c=33; //模块变量赋初值f(x::a,b,c)=x+a+b+c; //函数f中使用了模块变量
f(1); //函数调用结果:
67.
当使用编译符mvar时,未声明的变量均看作模块变量,故前面的例子可写成:mvar:
a=11, b=22, c=33; //模块变量赋初值
f(x)=x+a+b+c; //函数f中使用了模块变量
f(1); //函数调用结果:
67.
这样看起来似乎不错,的确,在简单的程序中,这样写代码很简洁方便。不过,在复杂的程序中却不推荐使用编译符mvar,因为它常常会隐藏一些人为的错误,例如下面的代码通过了编译,但--看看你的眼力,能否发现其中的错误?mvar:
a=11, b=22, c=33; //模块变量赋初值
f(x)=x+a+d+c; //函数f中使用了模块变量
f(1); //函数调用若显示地声明模块变量,编译器会帮你发现这个错误:init(::a,b,c)= a=11, b=22, c=33; //模块变量赋初值
f(x::a,b,c)=x+a+d+c; //函数f中使用了模块变量
f(1); //函数调用故复杂的程序中,慎用编译符mvar。 我反复看了多遍,好帖,得支持
页:
[1]