更实际的区别Block
and Module
可以在这里看到:
Module[{x}, x]
Block[{x}, x]
(*
-> x$1979
x
*)
因此,如果您想返回,例如x
, 您可以使用Block
。例如,
Plot[D[Sin[x], x], {x, 0, 10}]
不起作用;为了让它发挥作用,可以使用
Plot[Block[{x}, D[Sin[x], x]], {x, 0, 10}]
(当然这并不理想,这只是一个例子)。
另一个用途是类似的Block[{$RecursionLimit = 1000},...]
,暂时改变$RecursionLimit
(Module
不会因为重命名而起作用$RecursionLimit
).
也可以用一个Block
阻止对某些事物的评估,例如
Block[{Sin}, Sin[.5]] // Trace
(*
-> {Block[{Sin},Sin[0.5]],Sin[0.5],0.479426}
*)
即,它返回Sin[0.5]
仅在之后评估Block
已经执行完毕。这是因为Sin
在 - 的里面Block
只是一个符号,而不是正弦函数。你甚至可以做类似的事情
Block[{Sin = Cos[#/4] &}, Sin[Pi]]
(*
-> 1/Sqrt[2]
*)
(use Trace
看看它是如何工作的)。所以你可以使用Block
也可以在本地重新定义内置函数:
Block[{Plus = Times}, 3 + 2]
(*
-> 6
*)