forcal 发表于 2011-5-27 19:11

模块变量及编译符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。

发表于 1970-1-1 08:00

发表于 1970-1-1 08:00

pxwgih 发表于 2012-1-1 13:45

我反复看了多遍,好帖,得支持

发表于 1970-1-1 08:00

alair004 发表于 2012-2-6 14:33

页: [1]
查看完整版本: 模块变量及编译符mvar的使用