数学建模社区-数学中国
标题:
模块变量及编译符mvar的使用
[打印本页]
作者:
forcal
时间:
2011-5-27 19:11
标题:
模块变量及编译符mvar的使用
Forcal中,通常模块变量要先声明,后使用。例如:
init(::a,b,c)= a=11, b=22, c=33; //模块变量赋初值
6 {9 T1 s6 u9 E" l* g/ n
f(x::a,b,c)=x+a+b+c; //函数f中使用了模块变量
$ U' J- q2 D! b/ @ n
f(1); //函数调用
复制代码
结果:
( ~) R0 F2 E' R: d1 y, M* \
67.
& \, q& O, U) {
0 }$ [, k4 X0 k3 t( e
当使用编译符mvar时,未声明的变量均看作模块变量,故前面的例子可写成:
mvar:
$ x7 | T, {6 A" }! c* i
a=11, b=22, c=33; //模块变量赋初值
9 ~$ G3 ^* m( l1 V
f(x)=x+a+b+c; //函数f中使用了模块变量
$ `" _& q; m, P9 G9 t6 b) \
f(1); //函数调用
复制代码
结果:
1 h4 x u5 Y: g& M
67.
$ E; C, l% s' Z, ?
; X& v2 Q* e- |" R
这样看起来似乎不错,的确,在简单的程序中,这样写代码很简洁方便。不过,在复杂的程序中却不推荐使用编译符mvar,因为它常常会隐藏一些人为的错误,例如下面的代码通过了编译,但--看看你的眼力,能否发现其中的错误?
mvar:
$ B) b, ?/ n4 u: W9 v9 g
a=11, b=22, c=33; //模块变量赋初值
: X8 E9 j8 G) B* y2 `, t9 u
f(x)=x+a+d+c; //函数f中使用了模块变量
& u6 ~! G* ]# |! Y+ N J" z3 ^3 |
f(1); //函数调用
复制代码
若显示地声明模块变量,编译器会帮你发现这个错误:
init(::a,b,c)= a=11, b=22, c=33; //模块变量赋初值
; i5 Z" U& l/ Y7 b3 c
f(x::a,b,c)=x+a+d+c; //函数f中使用了模块变量
& N- x: t8 X! W7 g3 i$ U! n
f(1); //函数调用
复制代码
故复杂的程序中,慎用编译符mvar。
作者:
pxwgih
时间:
2012-1-1 13:45
我反复看了多遍,好帖,得支持
作者:
alair004
时间:
2012-2-6 14:33
囧了,下了无数不知道用哪个有用
1988890824492765
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5