Проблемы вариантов прохождения в специализированных сюжетных функций для системы 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};
Есть четыре небольшие тонкости:
  1. у меня есть необязательный параметр в моей функции, который должен быть списком целых чисел.
  2. я хочу иметь возможность вызывать функцию с любым вариантом построения, особенно используя значения, отличные от значений по умолчанию, указанных в третьем разделе. линия.
  3. я хочу иметь значения по умолчанию для некоторых параметров.
  4. я потенциально хочу поместить другие опции в функцию, поэтому не гарантируется, что все опции должны быть переданы в plot.
Но то, что у меня есть выше, не работает. Параметры по умолчанию, которые я установил, игнорируются, но они появляются в информации ??MyPlotFunction для моей функции. Я приведу примеры, если вы, ребята, еще не можете обнаружить ошибку.

Править: Примеры, которых нет работа:

  1. SimplePlot[t_,opts:OptionsPattern[{PlotRange->{-4,4},Frame->True}]]:= Plot[2x+t,{x,0,1},opts]; Не удается, параметр по умолчанию игнорируется.

  2. SimplePlot[t_,opts:OptionPattern[]]:= Plot[2x+t],{x,0,1},opts]; Options[SimplePlot] = {PlotRange->{-4,4},Frame->True}; Не удается, параметр по умолчанию игнорируется.

  3. SimplePlot[t_,opts__:{PlotRange->{-4,4},Frame->True}]:= Plot[2x+t,{x,0,1},opts]; Параметры по умолчанию работают с простым вызовом, но если один из этих параметров или любой другой параметр участка переопределен, остальные значения по умолчанию теряются.

2 5

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];