Re: Re: options to functions
- To: mathgroup at smc.vnet.net
- Subject: [mg24154] Re: [mg24080] Re: options to functions
- From: Maarten.vanderBurgt at icos.be
- Date: Wed, 28 Jun 2000 22:50:38 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hallo Roger, David,
I had a similar problem some time ago. I guess it is related to the context
of the option AtomName and the variable atomname in the package. I manged
to find out by putting a few print statement in my function. Using print
statements I found out that when it went wrong I was working with two
different variables: Global`myoption and
mypackages`package`Private`myoption.
It got solved the following way:
BeginPackage["`mypackages`package`"];
MyFunction::usage =
"... With the option MyOption -> True MyFunction returns... In the
default case MyOption -> False only ... is returned.";
MyOption ::usage="MyOption is an option of MyFunction. It can be True or
False. See MyFunction."
Begin["`Private`"];
Options[MyFunction]={MyOption ->False};
MyFunction[x_, y_, z_, opts___] := Module[
{a,b, ...and other variables..., myoption},
a =...
b =...
myoption= MyOption /. {opts} /. Options[MyFunction];
If[myoption === True, a , b]]
End[];
Print[" .. `mypackages`package` v0 loaded"];
Protect[MyFunction];
EndPackage[];
I do not remember what exactly made it work, but I removed MyOption from
the Protect[ ] statement and included the MyOption::usage.
Maarten
dreiss at NOSPAMscientificarts.com (David Reiss) on 23-06-2000 08:26:47 AM
Subject: [mg24154] [mg24080] Re: options to functions
In article <8ipnjn$ap7 at smc.vnet.net>, Roger Mason
<rmason at sparky2.esd.mun.ca> wrote:
> Hi,
>
> I am writing a function inside a package and wish to pass options to it.
>
> For testing purposes I have this (inside the Private context of the
> package):
>
> Options[XRDCoordList] = {AtomName -> False}
> ... (some functions defined here ...
>
> This is the troublesome function...
>
> XRDCoordList[name_String, atom_List, transl_List, opts___?OptionQ] :=
> Module[
> { n = Length[atom], ans = {}, atomname },
> atomname = AtomName /. { opts } /. Options[XRDCoordList];
> Do[
> AppendTo[ans, Map[atom[[i]] + # &, transl] ] , {i, 1, n}];
> ans = Flatten[ ans ];
> Do[If[ans[[i]] >= 1,
> ans[[i]] = ans[[i]] - 1](*If[ans[[i]] < 0,
> ans[[i]] = ans[[i]] + 1]*) , {i, 1, Length[ans]} ];
> (*If[atomname,
> ans = Insert[ans, name, Table[n, {n, 1, Length[ans] - 3, 3} ] ];
>
> Partition[ans, 4 ], Partition[ ans, 3 ]] *) atomname
> ]
>
> When I invoke it using
>
> ca = XRDCoordList["ca", {{0, 0, 0}, {0, 0, 1/2}}, cenTransl,
> AtomName -> True] // N
>
> it always returns False.
>
> I can't see what I've done wrong.
>
> Thanks,
>
> Roger Mason
This works (returns True) when I substitute a list for cenTransl
for Mathematica 4 on the Mac...
_David
--
) Scientific Arts: http://www.scientificarts.com
) Creative Services and Consultation for the Applied
) and Pure Sciences:: David Reiss: dreiss at !SPAMscientificarts.com
) [Remove the !SPAM to send email]