虚拟全书 > 核心语言 > 模块化和事物的命名 > 块与模块的比较 >

块与模块的比较

当进行 Mathematica 编程时,应当尽量使它的项相互独立,这样程序就容易理解、维护和扩充.
保证程序中不同相相互不影响的一个重要途径是给它的变量一定的"范围". Mathematica 用模块和块这两种机制来限制变量的范围.
在实际编程时,模块远远比块常用,而在相互作用的计算中需要确定范围时,往往是块比较方便.
Module[vars,body]词汇(lexical)定界
Block[vars,body]动态定界

Mathematica 变量的定界机理.

大部分计算机语言使用与 Mathematica 模块类似的词汇定界机理. 一些像LISP等符号计算语言与 Mathematica 块类似的动态定界机理.
在使用词汇定界时,变量在一个程序中的一个代码段被作为局部变量. 在动态定界时,在程序执行历史的一部分被作为局部值.
在C和Java等编译语言中,代码的执行历史之间的区分非常明显. Mathematica 的符号特性使这个区别不明显,其原因是代码在程序的执行过程中可以动态地生成.
Module 的作用是在模块作为 Mathematica 的代码被执行时处理表达式 body 的形式,当任何 vars 明显地出现在代码中时,就被当作局部变量.
Block 不注意表达式 body 的形式. 而是,在 body 的全局计算过程中使用 vars 的局部值.
通过 来定义 .
In[1]:=
Click for copyable input
Out[1]=
在块内 的计算过程中, 用了局部值.
In[2]:=
Click for copyable input
Out[2]=
这里仅明显出现在 中的 被当作局部变量处理.
In[3]:=
Click for copyable input
Out[3]=
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team
格式:   HTML  |  CDF