加载一个软件包可能会导致变量“遮盖” (Shadowing) 问题. 我们将说明怎样处理这个问题.
定义一个符号或函数:
定义符号 A1:
默认情况下,在 Global` 上下文环境中创建新的符号:
加载一个软件包
加载 Music 软件包. 该软件包在 Music` 上下文环境中定义了符号 A1,该符号遮盖了之前定义的符号 Global`A1:
现在,A1 指代的是 Music` 上下文环境中定义的符号:
Music` 上下文中 A1 的值与 Global` 上下文中的不同. 红色表示 Global`A1 符号被遮盖:
可通过明确指定上下文来获取之前定义的 A1 的值:
- “Shadowing” 意味着相同的符号出现在上下文路径 $ContextPath 的多个上下文中,使得一个或多个符号不可被访问,除非指定明确的上下文. 请到上下文和程序包中查看更多详细信息.
解决遮盖问题
移除被遮盖的符号来解决问题:
A1 符号不再是红色的,表明它不再遮盖其他符号:
技术要点
遵守用户定义的符号和函数以小写字母开头的约定,避免出现”遮盖” (Shadowing) 问题 .
遮盖问题不一定涉及用户定义的符号. 如果两个包定义相同的符号,则在同一会话中同时加载也会导致遮盖问题. 在这种情况下,可以删除任何一个符号来解决问题.