Проблемы вариантов прохождения в специализированных сюжетных функций для системы Mathematica
Это должно быть быстро для эксперта, но я относительно новичок в определении функций с опциями. Вот схема того, что я попробовал, я объясню после показа кода:
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};
Есть четыре небольшие тонкости:
- у меня есть необязательный параметр в моей функции, который должен быть списком целых чисел.
- я хочу иметь возможность вызывать функцию с любым вариантом построения, особенно используя значения, отличные от значений по умолчанию, указанных в третьем разделе. линия.
- я хочу иметь значения по умолчанию для некоторых параметров.
- я потенциально хочу поместить другие опции в функцию, поэтому не гарантируется, что все опции должны быть переданы в plot.
??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];
Параметры по умолчанию работают с простым вызовом, но если один из этих параметров или любой другой параметр участка переопределен, остальные значения по умолчанию теряются.
2 ответа:
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]]
Как отмечалось в комментариях к ответу Бретта, поскольку варианты, заданные сначала, заменяют варианты, заданные позже, и поскольку варианты для построения графика могут быть заданы в виде списка, вы можете написать что-то вроде этого:
Options[SimplePlot] = {PlotRange -> {-4, 4}, Frame -> True}; SimplePlot[t_, opts : OptionsPattern[]] := Plot[2 x + t, {x, 0, 1}, opts, #] & @ Options[SimplePlot];