RE: Two different packages can not Need[] the same

*To*: mathgroup at smc.vnet.net*Subject*: [mg79896] RE: [mg79867] Two different packages can not Need[] the same*From*: "David Annetts" <davidannetts at aapt.net.au>*Date*: Wed, 8 Aug 2007 04:51:35 -0400 (EDT)*References*: <200708070532.BAA12076@smc.vnet.net>

Hi Benedek, > Here is a problem a I face with: > I define two packages. Both needs the same > Statistics`ContinuousDistibutions` package. However, the > second one can not use it. Why? And how to resolve this problem? > > To make it more exact, in the following example I will define two > packages: ff and gg with the corresponding f and g functions > both using NormalDistribution. The first one evaluated works > while the second does not. the problem is even more > disappointing if we Get[] one packege twice and then are > unable to use the function. More complicated verisions can > appear using the Sytem` functions or using built-in packages > where we does not even know what other packages are invited. > > Does anyone have a solution for this problem? > > Kind Regards > Bence The In[] & Out[]'s here are very unhelpful .... > In[1]:=BeginPackage["ff`"] > Out[1]=ff` > In[2]:=Unprotect[f] > Out[2]={} > In[3]:=Begin["`Private`"] > Out[3]=ff`Private` > In[4]:=Needs["Statistics`ContinuousDistributions`"] > In[5]:=Options[f]:={MyDistributionFunction\[Rule](NormalDistri > bution[#, > 0.2 #]&)} > f[x_,opts___]:=Random[(MyDistributionFunction/.{opts}/.Options[f])[x]] > In[7]:=End[] > Out[7]=ff`Private` > In[8]:=Protect[f] > Out[8]={f} > In[9]:=EndPackage[] > > In[10]:=f[3] > Out[10]=2.16487 > In[11]:=ff`f[3] > Out[11]=4.16217 > > In[12]:=BeginPackage["gg`"] > Out[12]=gg` > In[13]:=Unprotect[g] > Out[13]={} > In[14]:=Begin["`Private`"] > Out[14]=gg`Private` > In[15]:=Needs["Statistics`ContinuousDistributions`"] > In[16]:=Options[g]:={MyDistributionFunction\[Rule] > (NormalDistribution[#,0.2 #]&)} > g[x_,opts___]:=Random[(MyDistributionFunction/.{opts}/.Options[f])[x]] > In[18]:=End[] > Out[18]=gg`Private` > In[19]:=Protect[g] > Out[19]={g} > In[20]:=EndPackage[] You have a typo. You meant Options[g] rather than Options[f] in your definition of g. Also note that you don't need either of the two Needs[] statements. As online help shows, defining your packages BeginPackage["ff`", {"Statistics`ContinuousDistributions`"}] BeginPackage["gg`", {"Statistics`ContinuousDistributions`"}] Does the same thing. Regards, Dave.

**References**:**Two different packages can not Need[] the same utility package?***From:*"benedek.kovacs.mr@gmail.com" <benedek.kovacs.mr@gmail.com>