$ContextPath
好吧,这是一种通过适当调整来解决问题的方法(我认为) :
SetOptions[EvaluationNotebook[], CellContext -> "GlobalTestCtxt`"];
Remove[f, GlobalTestCtxt`Numerical`f, par1, par2];
f[par1_, par2_] := {par1, par2};
savedContextPath = $ContextPath;
Begin["GlobalTestCtxt`Numerical`"];
Print[{$ContextPath, $Context}];
$ContextPath = DeleteCases[$ContextPath, "GlobalTestCtxt`"];
par1 = 1;
par2 = 2;
End[];
$ContextPath = savedContextPath;
现在,这将进行分析评估:
f[par1, par2]
这在数字上:
savedContextPath = $ContextPath;
Begin["GlobalTestCtxt`Numerical`"];
$ContextPath = Prepend[$ContextPath, $Context];
f[par1, par2]
End[];
$ContextPath = savedContextPath;
我说它脆弱的原因是除非你小心,否则很容易将符号放入错误的上下文中。例如,假设您在评估“数字”块之前忘记在全局上下文中评估 f 。好吧,现在您的数字块将无法正常工作,因为它会变成一个(完全有效的)符号GlobalTestCtxt`Numerical`f
,当您第一次评估数字块时,您无意中将其输入到符号表中。由于像这样的潜在错误,我个人不使用这种方法。
编辑:修复了一个错误(在数字上下文中进行分配时需要隐藏“全局”上下文)