Optional arguments & FilterRules
- To: mathgroup at smc.vnet.net
- Subject: [mg81837] Optional arguments & FilterRules
- From: Will Robertson <wspr81 at gmail.com>
- Date: Thu, 4 Oct 2007 04:32:31 -0400 (EDT)
Hello all,
The Mathematica documentation contains an example of how to send
optional arguments to different functions using FilterRules. Something
like this:
Options[g] = {b -> b0};
g[OptionsPattern[]] := {g : OptionValue[b]}
ClearAll[h]
h[x_, opts : OptionsPattern[]] := Module[{},
{g[Evaluate[FilterRules[{opts}, Options[g]]]], {h : x}}]
h[ccc, b -> bbb]
This is all well and good when the function this is happening inside
doesn't take rule based arguments of its own, but what if it does?
The "obvious" method gives the right result but also sends a warning:
ClearAll[h]
Options[h] = {c -> c0};
h[opts : OptionsPattern[]] := Module[{},
{g[Evaluate[FilterRules[{opts},
Options[g]]]], {h : OptionValue[c]}}]
h[b -> bbb]
h[b -> bbb, c -> ccc]
Finally, here's what I managed to cook up to work around the warning:
ClearAll[h];
Options[h] = {c -> c0};
h[opts : OptionsPattern[]] := Module[{Opt},
gopts = FilterRules[{opts}, Options[g]];
hopts = FilterRules[{opts}, Options[h]];
Opt[x_] := OptionValue[h, hopts, x];
{g[Evaluate[gopts]], {h : Opt[c]}}]
h[b -> bbb]
h[b -> bbb, c -> ccc]
Is there a better way? Perhaps it's better to create a wrapper
function that simply passes its arguments along to the functions doing
the work.
Cheers,
Will