块与模块的比较
当进行 Mathematica 编程时,应当尽量使它的项相互独立,这样程序就容易理解、维护和扩充.
保证程序中不同相相互不影响的一个重要途径是给它的变量一定的"范围". Mathematica 用模块和块这两种机制来限制变量的范围.
在实际编程时,模块远远比块常用,而在相互作用的计算中需要确定范围时,往往是块比较方便.
大部分计算机语言使用与 Mathematica 模块类似的词汇定界机理. 一些像LISP等符号计算语言与 Mathematica 块类似的动态定界机理.
在使用词汇定界时,变量在一个程序中的一个代码段被作为局部变量. 在动态定界时,在程序执行历史的一部分被作为局部值.
在 C 和 Java 等编译语言中, 它们的变量在使用之前就要声明类型,因此在编译前就已经确定了变量的类型;"代码"和"执行历史"之间的区分非常明显. 而 Mathematica 属于动态类型语言,它的符号特性使这个区别不明显,其原因是代码在程序的执行过程中可以动态地生成.
Module[vars, body] 的作用是在模块作为 Mathematica 的代码被执行时处理表达式 body 的形式,当任何 vars 明显地出现在代码中时,就被当作局部变量.
Block[vars, body] 不注意表达式 body 的形式. 而是,在 body 的全局计算过程中使用 vars 的局部值.
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
