Я закончил тем, что использовал решение, подобное тому, что опубликовал @ExcessJudgement. Спасибо, что соединили эту кодовую ручку, кстати! Я создал эту функцию:
jumpToSelection: function(){
this.$nextTick(() => {
let selected = this.selected[0];
let page = Math.ceil((this.products.indexOf(selected) + 1) / this.pagination.rowsPerPage);
this.pagination.sortBy = "id";
this.$nextTick(() => {
this.pagination.page = page;
});
});
}
Я не уверен, почему мне нужно было поместить это в $ nextTick (), но иначе это не сработало бы. Если у кого-то есть понимание этого, было бы полезно узнать, почему это так.
Второй метод $ nextTick () был необходим, поскольку при обновлении sortBy страница не вызывала обновления страницы, и, поскольку я нахожу страницу на основе идентификатора, мне нужно убедиться, что она отсортирована правильно, прежде чем прыгать страницы. Немного запутанный, но он работает.
Не существует прямого способа сделать это, как вы пытались.
Обычный подход - использовать «varargs» и проверять количество аргументов. Примерно так:
function f(arg1, arg2, arg3)
if nargin < 3
arg3 = 'some default'
end
end
Есть несколько причудливых вещей, которые вы можете сделать с isempty
и т. Д., И вы можете посмотреть на Matlab central для некоторых пакетов, которые объединяют такие вещи.
Вы может взглянуть на varargin
, nargchk
и т. д. Они полезные функции для такого рода вещей. varargs позволяет вам оставить переменное число конечных аргументов, но это не поможет вам решить проблему значений по умолчанию для некоторых / всех из них.
Это более или менее поднято из Руководство по Matlab ; У меня есть только опыт прохождения ...
function my_output = wave ( a, b, n, k, T, f, flag, varargin )
optargin = numel(varargin);
fTrue = inline('0');
if optargin > 0
fTrue = varargin{1};
end
% code ...
end
I've found that the parseArgs function can be very helpful.
Да, было бы очень приятно иметь возможность делать, как ты написал. Но это не возможно в MATLAB. Многие из моих утилит, которые допускают значения по умолчанию для аргументов, как правило, пишутся с явными проверками в начале, как это:
if (nargin<3) or isempty(myParameterName)
MyParameterName = defaultValue;
elseif (.... tests for non-validity of the value actually provided ...)
error('The sky is falling!')
end
Хорошо, поэтому я обычно применяю лучшее, более описательное сообщение об ошибке. Обратите внимание, что проверка пустой переменной позволяет пользователю передавать пустую пару скобок [] в качестве заполнителя для переменной, которая примет значение по умолчанию. Автор все еще должен предоставить код для замены этого пустого аргумента значением по умолчанию.
Мои более сложные утилиты с параметрами MANY, все из которых имеют аргументы по умолчанию, часто будут использовать интерфейс пары свойство / значение по умолчанию. аргументы. Эта базовая парадигма видна в графических инструментах дескриптора в Matlab, а также в optimset, odeset и т. д.
В качестве средства для работы с этими парами свойство / значение вам необходимо узнать о varargin, как способ ввода в функцию полностью переменного числа аргументов. Я написал (и опубликовал) утилиту для работы с такими парами свойство / значение, parse_pv_pairs.m . Это поможет вам преобразовать пары свойство / значение в структуру matlab. Это также позволяет вам предоставлять значения по умолчанию для каждого параметра. Преобразование громоздкого списка параметров в структуру - ОЧЕНЬ хороший способ передать их в MATLAB.
parse_pv_pairs.m . Это поможет вам преобразовать пары свойство / значение в структуру matlab. Это также позволяет вам предоставлять значения по умолчанию для каждого параметра. Преобразование громоздкого списка параметров в структуру - ОЧЕНЬ хороший способ передать их в MATLAB. parse_pv_pairs.m . Это поможет вам преобразовать пары свойство / значение в структуру matlab. Это также позволяет вам предоставлять значения по умолчанию для каждого параметра. Преобразование громоздкого списка параметров в структуру - ОЧЕНЬ хороший способ передать их в MATLAB.Matlab не предоставляет механизма для этого, но вы можете создать его в коде пользовательского пространства, который короче, чем последовательности inputParser или «if nargin <1 ...».
function varargout = getargs(args, defaults)
%GETARGS Parse function arguments, with defaults
%
% args is varargin from the caller. By convention, a [] means "use default".
% defaults (optional) is a cell vector of corresponding default values
if nargin < 2; defaults = {}; end
varargout = cell(1, nargout);
for i = 1:nargout
if numel(args) >= i && ~isequal(args{i}, [])
varargout{i} = args{i};
elseif numel(defaults) >= i
varargout{i} = defaults{i};
end
end
Затем вы можете вызывать его в своих функциях следующим образом:
function y = foo(varargin)
%FOO
%
% y = foo(a, b, c, d, e, f, g)
[a, b, c, d, e, f, g] = getargs(varargin,...
{1, 14, 'dfltc'});
Форматирование - это соглашение, которое позволяет вам читать от имен параметров до их значения по умолчанию. Вы можете расширить свой getargs () с помощью дополнительных спецификаций типа параметра (для обнаружения ошибок или неявного преобразования) и диапазонов числа аргументов.
У этого подхода есть два недостатка. Во-первых, он медленный, поэтому вы не хотите использовать его для функций, вызываемых в циклах. Во-вторых, справка по функциям Matlab - подсказки автозаполнения в командной строке - не работают для функций varargin. Но это довольно удобно.
Я использовал inputParser
объект для настройки параметров по умолчанию. Matlab не примет формат, подобный Python, который вы указали в вопросе, но вы должны иметь возможность вызывать функцию следующим образом:
wave(a,b,n,k,T,f,flag,'fTrue',inline('0'))
После того, как вы определите функцию wave
следующим образом:
function wave(a,b,n,k,T,f,flag,varargin)
i_p = inputParser;
i_p.FunctionName = 'WAVE';
i_p.addRequired('a',@isnumeric);
i_p.addRequired('b',@isnumeric);
i_p.addRequired('n',@isnumeric);
i_p.addRequired('k',@isnumeric);
i_p.addRequired('T',@isnumeric);
i_p.addRequired('f',@isnumeric);
i_p.addRequired('flag',@isnumeric);
i_p.addOptional('ftrue',inline('0'),1);
i_p.parse(a,b,n,k,T,f,flag,varargin{:});
Теперь значения, переданные в функцию, доступны через i_p.Results
. Кроме того, я не был уверен, как проверить, что параметр, переданный для ftrue
, на самом деле был встроенной
функцией, поэтому оставил валидатор пустым.