对于专家来说这应该很快,但我在使用选项定义函数方面相对较新。这是我尝试过的示意图,我将在显示代码后解释:
MyPlotFunction[params_, optionalparameter_List:{1,2,3}, opts:OptionsPattern[]]:=
Plot [ stuff, {x,0,1}, Evaluate@FilterRules[{opts},Options@Plot]];
Options[MyPlotFunction] = { PlotRange->{-5,5}, Frame->True, ... other plot options};
有四个微妙的细微之处:
但我上面所说的不起作用。我设置的默认选项将被忽略,但它们会显示在我的函数的??MyPlotFunction
信息中。如果你们还没有发现错误,我会举例说明。
编辑: 不起作用的示例:
SimplePlot[t_,opts:OptionsPattern[{PlotRange->{-4,4},Frame->True}]]:=
Plot[2x+t,{x,0,1},opts];
失败,默认选项被忽略。
SimplePlot[t_,opts:OptionPattern[]]:=
Plot[2x+t],{x,0,1},opts];
Options[SimplePlot] = {PlotRange->{-4,4},Frame->True};
失败,默认选项被忽略。
SimplePlot[t_,opts__:{PlotRange->{-4,4},Frame->True}]:=
Plot[2x+t,{x,0,1},opts];
默认选项适用于裸调用,但如果覆盖其中一个选项或任何其他绘图选项,则其余默认值将丢失。
答案 0 :(得分:9)
OptionsPattern[]
仅捕获传入的选项,因此您需要明确包含任何非默认选项设置,例如使用以下内容:
FilterRules[{opts, Options[MyPlotFunction]}, Options@Plot]
这是一个简单的例子:
Options[MyPlotFunction] = {PlotRange -> {-5, 5}, Frame -> True};
MyPlotFunction[params_, optionalparameter_List: {1, 2, 3},
opts : OptionsPattern[MyPlotFunction]] :=
Plot[optionalparameter, {x, 0, 1},
Evaluate@FilterRules[{opts, Options[MyPlotFunction]}, Options@Plot]]
答案 1 :(得分:0)
正如Brett的答案中所述,由于选项给出了后来给出的第一个替代选项,并且因为Plot的选项可以作为列表给出,你可以这样写:
Options[SimplePlot] = {PlotRange -> {-4, 4}, Frame -> True};
SimplePlot[t_, opts : OptionsPattern[]] :=
Plot[2 x + t, {x, 0, 1}, opts, #] & @ Options[SimplePlot];