上下文和程序包

典型的 Mathematica 程序包引入一些能在这个包之外使用的符号. 这些符号可能与在包中定义的新函数或目标相对应.

约定在一个程序包中引入的新符号放在名与该程序包的相关的上下文内. 在这个包中阅读时,这个上下文将加在上下文搜索路径 $ContextPath 的开头.

为了证明 primality,这里读入一个程序包.
In[1]:=
Click for copyable input
这个包将它的上下文添加在 $ContextPath 之前.
In[2]:=
Click for copyable input
Out[2]=
符号 在程序包设置的上下文之中.
In[3]:=
Click for copyable input
Out[3]=
可以用短名来指代这个符号.
In[4]:=
Click for copyable input
Out[4]=

在一个程序包中定义的变量的全名往往很长,大部分情况下,只需要用它的短名即可,其原因是在读入这个程序包时,它的上下文被加在 $ContextPath 之中,当敲入短名后就会自动搜索这个上下文.

当同一个短名出现在两个不同的程序包中时就变得比较复杂,这时当读入第二个程序包时,Mathematica 就会发出警告,它告诉我们哪一个符号在引入新符号时被屏蔽.

中的符号 被新程序包中的有相同短名的符号所屏蔽.
可以通过全名调用被屏蔽的符号.
In[6]:=
Click for copyable input
Out[6]=

冲突不仅在不同程序包的符号间发生,而且也在程序包的符号与 Mathematica 的进程中引入的符号间发生. 在当前上下文中定义了符号后,这个符号将被从程序包中读入的短名相同的符号所屏蔽,其原因是 Mathematica 总是先在上下文搜索路径中寻找符号,然后才在当前上下文中寻找符号.

在当前上下文中定义了一个函数.
In[7]:=
Click for copyable input
Out[7]=
In[8]:=
Click for copyable input
Out[8]=
任何其它名为 的函数将被再当前上下文中的函数屏蔽.
这里使用了程序包中的 .
In[10]:=
Click for copyable input
Out[10]=

当不需要的符号屏蔽了所需的符号时,最好的途径是用 Remove[s] 去删除这个不需要的符号. 有时另一个合适的选择是去重新排列 $ContextPath 中的元素,重新设置 $Context 的值,以便包含所需符号的上下文先出现.

$Packages一个对应于 Mathematica 进程中加载的所有程序包的上下文集合

给出一个程序包集合.

New to Mathematica? Find your learning path »
Have a question? Ask support »