Re: Options in self-defined functions
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1779] Re: [mg1612] Options in self-defined functions
- From: "Wm. Martin McClain" <wmm at chem.wayne.edu>
- Date: Sun, 30 Jul 1995 21:34:14 -0400
- Organization: Wayne State University, College of Science
Dear MathGroupers:
Here is a further question along the lines of one Allan Hayes
answered for Scott A. Hill [mg1612].
I have had trouble making a PACKAGE that contains a function with
options. I used the WRI package Miscellaneous`Audio` as a model,
but I must have missed some essential detail, because it does not
work quite correctly. Here is the full text of a didactic package
containing one fairly useless but simple function AnyF, described
below in its usage statement:
(**************cell begins*************************)
BeginPackage["OptionsExample`"];
AnyF::usage =
"AnyF[x,Name->f,ScaleFactor->s] returns f[s*x], where
the replacements are optional. The defaults are
Name->Tan and ScaleFactor->2 Pi.";
Begin["`Private`"];
Options[AnyF] = {Name->Tan, ScaleFactor->2Pi};
AnyF[x_,opts___](*public*) := iaf[x,opts](*private*);
iaf[x_,opts___]:=Module[{fn,sf},
{fn,sf} = {Name,ScaleFactor}/.{opts}/.Options[AnyF];
af[x,fn,sf]];
af[x_,fn_,sf_]:=fn[x*sf];
Protect[AnyF];
End[];
EndPackage[]
(****************cell ends************************)
Test the package:
?AnyF
AnyF[x,Name->f,ScaleFactor->s] returns f[s*x], where the
replacements are optional. The defaults are Name->Tan
and ScaleFactor->2 Pi.
AnyF[t]
Tan[2 Pi t]
The defaults work. Now try it with options:
AnyF[w,Name->Log,ScaleFactor->7]
Tan[2 Pi w]
The options do NOT work!
Ask Mma what it thinks the default options are:
Options[AnyF]
{ OptionsExample`Private`Name -> Tan,
OptionsExample`Private`ScaleFactor -> 2 Pi}
To make them work you have to give the full names:
AnyF[w,OptionsExample`Private`Name->Log,
OptionsExample`Private`ScaleFactor->7]
Log[7 w]
It works, but these long names are not what one wants.
How do you make the short names work?
I have tried several things:
(1) Put the Options statement in the outer part, not the Private` part.
(2) Make usage statements for Name and ScaleFactor.
These just make things worse.
Can anybody spot the problem?
Thanks in advance- Martin McClain
AnyF[t]
Tan[2 Pi t]
The defaults work. Now try it with options:
AnyF[w,Name->Log,ScaleFactor->7]
Tan[2 Pi w]
The options do NOT work!
Ask Mma what it thinks the default options are:
Options[AnyF]
{ OptionsExample`Private`Name -> Tan,
OptionsExample`Private`ScaleFactor -> 2 Pi}
To make them work you have to give the full names:
AnyF[w,OptionsExample`Private`Name->Log,
OptionsExample`Private`ScaleFactor->7]
Log[7 w]
It works, but these long names are not what one wants.
How do you make the short names work?
I have tried several things:
(1) Put the Options statement in the outer part, not the Private` part.
(2) Make usage statements for Name and ScaleFactor.
These just make things worse.
Thanks in advance- Martin McClain