2.6.2 局部常数定义局部常数 在模块中可以定义能赋值多次的局部变量,但有时仅需要赋值一次的局部常数. Mathematica 中的 With 结构可以建立局部常数. 定义 t 的全局值
Out[1]= |  |
定义把 t 用作局部常数的函 数使用定义w
Out[3]= |  |
t 仍然具有它的全局值
Out[4]= |  |
与模块中的情况相似,用 With 定义的初始值在 With 执行之前进行计算. 给局部变量赋值的表达式 t+1 用 t 的全局值进行计算
Out[5]= |  |
, 可以将 With 理解为 /. 运算的推广,可适用于 Mathematica 的代码.
使用 x 和 a
Out[6]= |  |
替代以后,With 的内容是 a=5, a 得到了全局值
Out[7]= |  |
清除 a 的值 在某种意义上,With 类似于局部变量仅赋值一次的 Module 的特殊形式. 用 With 而不用 Module 的主要原因之一是使 Mathematica 程序容易理解. 在模块中 的某一处遇到变量 x 时很可能需要跟踪整个模块的代码来得到 x 在该处的值,而在 With 结构中,只需要观察初始值列表就能得到局部常数的值. 有几个 With 结构时,总是某一个变量最里面的一个起作用. 可以将 Module 和 With 混用. 一般原则是某一变量最里面的 With 起作用. 在嵌套 With 结构中,总是最里的一个起作用
Out[9]= |  |
可以将 Module 和 With 结构混用
Out[10]= |  |
当名字不重合时,结构内的变量不屏蔽结构外的变量
Out[11]= |  |
除过 x 和 body 在何时计算外,With[ x =  , body] 做法基本类似.然而当表达式body 内部都包含 With 或 Module 结构时, With 显示特殊的性态. 主要的问题是防止不同 With 结构中的局部常数相互冲突, 或与全局目标冲突,有关细节将在 2.6.3 节讨论. 在 With 内部的 y 被重新命名以防止它与全局变量冲突
Out[12]= |  |
|