12
$\begingroup$
Options[myPlot] = Options[Plot];
myPlot[args___] := ...

When defining a "wrapper" function like the above, I'd like it to inherit the System` function's options. Should I use Options[myPlot] = Options[Plot] or Options[myPlot] := Options[Plot]?

$\endgroup$

1 Answer 1

13
$\begingroup$

I use the first style you gave:

Options[tListPlot]=Join[
    Options[ListPlot],
    Options[tLegend],
    {
        Rule[ShowLegend,False]
    }
];

The function is then defined as

tListPlot[data_,options:OptionsPattern[]]:=...

I don't see any reason to use SetDelayed (:=) in this context. EDIT As Brett Champion mentions in the comments, the default options for

System`Plot

will change if you use SetOptions on Plot. Hence, if you want your custom plot to always have the same options as Plot, use :=. I would prefer to specifically change the options for my Plot separately, so I would still use simply Set (=).

You might also want to check out this instructive question on Options in custom functions: Functions with Options

$\endgroup$
3
  • 6
    $\begingroup$ The default options of Plot will change if you use SetOptions. Using SetDelayed will pick up that change, unless SetOptions has also been applied to myPlot. $\endgroup$ Commented Apr 22, 2012 at 2:57
  • $\begingroup$ +1 Thanks @BrettChampion, I didn't even think of that. I updated the answer to reflect that possibility. $\endgroup$
    – tkott
    Commented Apr 22, 2012 at 13:38
  • 2
    $\begingroup$ I'd also like to point out that FilterRules can be used to strip out any additional options that are not present in the wrapped function. $\endgroup$
    – rcollyer
    Commented Apr 23, 2012 at 3:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.