加载一个软件包可能会导致变量遮盖 (Shadowing) 问题. 我们将说明怎样处理这个问题.

定义一个符号或函数:

定义符号 A1:

默认情况下,在 Global` 上下文环境中创建新的符号:

加载一个软件包

加载 Music 软件包. 该软件包在 Music` 上下文环境中定义了符号 A1,该符号遮盖了之前定义的符号 Global`A1:

现在,A1 指代的是 Music` 上下文环境中定义的符号:

Music` 上下文中 A1 的值与 Global` 上下文中的不同. 红色表示 Global`A1 符号被遮盖:

可通过明确指定上下文来获取之前定义的 A1 的值:

  • Shadowing 意味着相同的符号出现在上下文路径 $ContextPath 的多个上下文中,使得一个或多个符号不可被访问,除非指定明确的上下文. 请到上下文和程序包中查看更多详细信息.

解决遮盖问题

移除被遮盖的符号来解决问题:

A1 符号不再是红色的,表明它不再遮盖其他符号:

技术要点

遵守用户定义的符号和函数以小写字母开头的约定,避免出现遮盖 (Shadowing) 问题 .
遮盖问题不一定涉及用户定义的符号. 如果两个包定义相同的符号,则在同一会话中同时加载也会导致遮盖问题. 在这种情况下,可以删除任何一个符号来解决问题.