Block

Block[{x,y,},expr]

指定用符号 xy 的局部值计算 expr.

Block[{x=x0,},expr]

x 赋初始局部值.

更多信息

  • Block 允许用户设置一种环境,在此环境中,变量的值可被临时改变.
  • 在块执行时,xy 的赋值被清除. 在块执行结束时,这些符号的初始值得以恢复.
  • Block 仅影响符号的 values,而不影响其名称.
  • xy 被清除之前,计算 xy 的初始值.
  • Block[{vars},body/;cond] 可作为带有附加条件的变换法则的右边.
  • Block 具有 HoldAll 属性.
  • Block 实现了变量的动态作用域.
  • Block 在如 DoSumTable 等递归结构中,自动建立迭代递归变量的局部值.

背景

  • Block 是一个可以指定符号局部值的作用域结构,它隔绝了结构内部符号的值与外部对应符号可能预设的值. Block 实现了变量的动态作用域,这意味着局部符号的名字保持不变. 当局部符号有值时,使用该值;否则使用该符号在外围函数中的值(以此类推). Block 只局部化符号的值而不是替换它们.
  • 相反,Module 实现的是词法作用域,这意味着每次调用都会创建局部变量的一个新的唯一副本,不会在任何其它外围函数或后续对 Module 的调用中使用.
  • Block 通常比 Module 要快,所以当带作用域变量的函数需要被调用许多次时,使用 Block 可能更快. 在像 DoSumProductTable 这样的结构中会自动调用 Block 以局部化迭代变量的值. Block 可以嵌套使用.
  • With 是另一个允许定义局部常量的作用域结构. 它实现了只读的词法作用域变量,且只替换作用域结构中不作为局部变量出现的符号. 和 Block 一样,WithModule 要快. 尽管普通的替换不保持作用域,但 With 允许在未求值表达式内进行替换,这样就保持了嵌套作用域.
  • Block 结构内部(或外部)的多个表达式可用 CompoundExpression 组合在一起.

范例

打开所有单元关闭所有单元

基本范例  (1)

范围  (2)

临时改变全局系统参数的设置:

计算一个将某个变量临时设为给定值的表达式:

应用  (2)

执行深度递归计算:

$RecursionLimit 的缺省设置对此计算来说太小:

用局部表达式来可视化复映射:

属性和关系  (2)

Block 仅建立局部值;并不创建新符号:

Module 创建新符号:

迭代递归遍历以与 Block 类似的方法建立变量的局部值:

Wolfram Research (1988),Block,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Block.html.

文本

Wolfram Research (1988),Block,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Block.html.

CMS

Wolfram 语言. 1988. "Block." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/Block.html.

APA

Wolfram 语言. (1988). Block. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Block.html 年

BibTeX

@misc{reference.wolfram_2024_block, author="Wolfram Research", title="{Block}", year="1988", howpublished="\url{https://reference.wolfram.com/language/ref/Block.html}", note=[Accessed: 17-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_block, organization={Wolfram Research}, title={Block}, year={1988}, url={https://reference.wolfram.com/language/ref/Block.html}, note=[Accessed: 17-November-2024 ]}