Re: Options and FilterOptions
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg961] Re: Options and FilterOptions
- From: wagner at bullwinkle.cs.Colorado.EDU (Dave Wagner)
- Date: Thu, 4 May 1995 03:34:14 -0400
- Organization: University of Colorado, Boulder
In article <3nppkt$ohp at news0.cybernetics.net>,
Allan Hayes <hay@haystack> wrote:
>
>Here are some general points about options and the function
>FilterOptions that might be of use.
>
>1) Options can be of the form name:> value as well as name->value .
>So, one should normally use the form
> foo[___, opts___?OptionQ]
>
>2) Nested list of options are accepted by OptionQ
>
>In[1]:=
> OptionQ[{a->b,{{x :> y}}}]
>Out[1]=
> True
>
>and by other functions: eg
>
>In[2]:=
> Plot[x,{x,0,1}, {Frame ->True}];
>
>They can appear, or be generated, in code (though with care we
>could probably avoid this).
>
>Unfortunately we find
> (92 lines of discussion deleted)
Alan,
Thanks for pointing out that options could be specified as delayed
rules; I never would have thought of that. In truth, I still can't
think of a case in which you'd want to specify an option that way *in a
function call* --- that is, I can see why one sometimes needs delayed
rules in Options[foo], but not in foo[___, opts].
Judging from the discussion in your posting, using OptionQ introduces
a large number of potential problems. The ability to pass lists of
options to built-in functions appears to be an undocumented feature; I
have never seen this before, and upon checking The Book I can't find
any mention of it. So, I propose we apply the principle of Occam's
Razor and conclude that using OptionQ is too complicated to be "right."
I therefore propose the following pattern for matching a sequence of
options:
foo[___, opts:(_Rule | _RuleDelayed)...]
This does seem better than what I've been advocating, plus it avoids
all the "gotchas" that seem to be involved with nested lists of
options. I don't think that users should complain that a function
doesn't support an undocumented feature.
On the other hand, if you can point to anyplace that the lists-of-options
feature is documented, I'll eat these bits! :-)
Dave Wagner
Principia Consulting
(303) 786-8371
princon at csn.net
http://www.csn.net/princon