意外阴影和`删除[符号]`

Yar*_*tov 3 wolfram-mathematica

如果您评估以下代码两次,结果将会有所不同.谁能解释一下发生了什么?

findHull[points_] := Module[{},
   Needs["ComputationalGeometry`"];
   ConvexHull[points]
   ];
findHull[RandomReal[1, {10, 2}]];
Remove["Global`ConvexHull"];
findHull[RandomReal[1, {10, 2}]]
Run Code Online (Sandbox Code Playgroud)

Jan*_*nus 6

问题在于,即使在您调用之前未对模块进行求值findHull,也会在定义时解析符号findHull(即:新的下限值以findHull符号而非文本的形式存储).这意味着在第一轮中,ConvexHull解析为Global`ConvexHull 因为Needs未评估.在第二轮,ComputationalGeometry是对$ContextPathConvexHull解析为您预期.

如果你真的不能忍受ComputationalGeometry事先加载,请参考ConvexHull它的全名:ComputationalGeometry`ConvexHull.另见相关答案.

HTH