Проблемы с прохождением опций в специализированных сюжетных функциях для Mathematica - PullRequest
5 голосов
/ 17 декабря 2011

Это должно быть быстро для эксперта, но я относительно новичок в определении функций с опциями. Вот схема того, что я пробовал, я объясню после показа кода:

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. Мне нужна возможность вызова функции с любым параметром Plot, особенно с использованием значений, отличных от значений по умолчанию, указанных в третьей строке.
  3. Я хочу иметь значения по умолчанию для некоторых параметров.
  4. Я потенциально хочу добавить другие функции в функцию, поэтому не гарантируется, что все параметры будут переданы в сюжет.

Но то, что я имею выше, не работает. Параметры по умолчанию, которые я установил, игнорируются, но они отображаются в информации ??MyPlotFunction для моей функции. Я приведу примеры, если вы, ребята, пока не можете определить ошибку.

Edit: Примеры, которые не работают:

  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 ]

9 голосов
/ 17 декабря 2011

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

enter image description here

0 голосов
/ 17 декабря 2011

Как отмечается в комментариях к ответу Бретта, поскольку параметры, указанные первыми, заменяют параметры, заданные позже, и поскольку параметры графика могут быть заданы в виде списка, вы можете написать что-то вроде этого:

Options[SimplePlot] = {PlotRange -> {-4, 4}, Frame -> True};

SimplePlot[t_, opts : OptionsPattern[]] :=
  Plot[2 x + t, {x, 0, 1}, opts, #] & @ Options[SimplePlot];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...