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