以下代码按预期返回14:
Block[{expr},
expr = 2 z;
f[z_] = expr;
f[7]]
Run Code Online (Sandbox Code Playgroud)
但是,如果你改变Block的Module则返回2*z.除了expr你本地化之外,其他变量似乎并不重要.我以为我理解Mathematica中的Module,Block和With但是我无法解释这个例子中Module和Block之间的行为差异.
相关资源:
PS:感谢迈克尔·皮拉特, 达沃拉克和比尔·怀特追随这种奇怪的气味.Davorak澄清并深入探讨了问题的核心: 为什么Mathematica会破坏模块中的正常范围规则?