MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: named optional parameters

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37934] Re: named optional parameters
  • From: Rainer Gruber <rainer.gruber at gmx.at>
  • Date: Wed, 20 Nov 2002 09:09:04 -0500 (EST)
  • Organization: Johannes Kepler Universitaet Linz
  • References: <arcu57$fjg$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Doris S. wrote:
> Hello NG!
> 
> I´ve got a problem using named optional parameters for a function in a
> package:
> 
> Like described in chapter 2.3.10 of the Mathematica Help I created a
> list of default values for my parameters "DrawCh" and "DrawG". Then I
> wrote a function with optional parameters opts___ and evaluated them
> using the list. When I put all this (my function "ParamTest" and de
> Options for "ParamTest") into a Package and call the function from a
> notebook the given parameters are not evaluated correctly. The
> parameters just have the (default) values given in the Options list
> and don´t change as I defined them when calling the function.
> The source code of the function, nevertheless, seems to be correct,
> because putting the function outside a package and using it there
> works correctly.
> 
> So do I have to define something else in the package so I can use
> named optional parameters?
> 
> Additional Information:
> OS: Win2000
> Version: Mathematica 4.0
> 
> I appreciate any help!
> 
> Doris S.
> 
> 
> 
> The source:
> 
> (*****************************TestPackage.m:***************************)
> BeginPackage["TestPackage`TestPackage`"]
> 
> 
> Unprotect[ParamTest];
> Begin["TestPackage`TestPackage`Private`"]
> 
> (**********************************************************************)
> 
> Options[ParamTest]={DrawCh->True,DrawG->True};
> 
> ParamTest[opts___]:=Block[{dc,dg},
> 	dc=DrawCh/.{opts}/.Options[ParamTest];
> 	dg=DrawG/.{opts}/.Options[ParamTest];
> 	Return[{dc,dg}];    
> ];
> 
> (**********************************************************************)
> End[]
> Protect[ParamTest];
> EndPackage[]
> 
> (************* Using the function in a notebook
> ***********************)
> In[1]:= << TestPackage`TestPackage`
> 
> In[2]:=  Names["TestPackage`TestPackage`*"]
> 
> Out[2]= {"ParamTest"}
> 
> In[3]:= ParamTest[] (*default values*)
> 
> Out[3]= {True, True}
> 
> In[4]:= ParamTest[DrawCh -> False] (*result should be {False,True}*)
> 
> Out[4]= {True, True}
> 
> In[5]:= ParamTest[DrawG -> False] (*result should be {True,False}*)
> 
> Out[5]= {True, True}
> 
> 
> (*putting the function code of the package in a notebook and
> evaluating it gives the correct result*)
> 
> In[6]:= 
> Options[ParamTest1] = {DrawCh -> True, DrawG -> True};
> ParamTest1[opts___] := 
>     Block[{dc, dg}, dc = DrawCh /. {opts} /. Options[ParamTest1];
>       dg = DrawG /. {opts} /. Options[ParamTest1];
>       Return[{dc, dg}];];
> 
> In[8]:= ParamTest1[DrawG -> False]
> 
> Out[8]= {True, False}
> 

I think the problem is the 'Context' of your options
In the Definition of 'ParamTest' you use e. g. the symbol

   TestPackage`TestPackage`Private`DrawG

but if you evalaute

   ParamTest[DrawG -> False]

you use the symbol

   Global`DrawG

ParamTest1 works, beacause its options are appears in the 
Global context.So the solution for your problem is to create 
Global`DrawG first, eg. with

   Unprotect[ParamTest, DrawG,...];
   ClearAll[ParamTest, DrawG,...];

or

   DrawG::usage="..."

after

   BeginPackage["TestPackage`TestPackage`"]

hope that helps,
Rainer



  • Prev by Date: Re: How to do ListPlot with absolute point size?
  • Next by Date: RE: contour plot from a list
  • Previous by thread: Re: named optional parameters
  • Next by thread: How do I plot this and get their values