Matlab имеет функцию, varargin
(https://www.mathworks.com/help/matlab/ref/varargin.html),, которая позволяет:
- Список переменных входных аргументов
- Текст, пары значений
- Разбор пар значений в структуру
Я использовал эту функцию для установки параметров, таких как:
- Выбор для предоставления подробного вывода (аналогично ведению журнала)
- Открытые графические окна для описания результатов вычислений (что-то вроде графической регистрации)
- Установка таких параметров, как пороги, диапазоны поиска, полиномиальный порядок подгонки, методы интерполяции (например, кубический сплайн, ближайший сосед).
Matlab Пример
В примере показано, как inputParser
создает структуру, содержащую информацию из списка аргументов. Он включает значение по умолчаниюзначения и проверка типа ввода без указания порядка (или всех) аргументов
Вызов метода
obj.setRegionPeak('NumberMax', 5, 'IsVerbose', false)
Метод
function setRegionPeak = findPeaks(obj, varargin)
p = inputParser;
addParameter(p, 'NumberMax', 5);
addParameter(p, 'WidthSearch', 6);
addParameter(p, 'IsVerbose', 6);
parse(p, varargin{:});
if(p.Results.IsVerbose)
% plot a figure
% write to the console
end
while( (vMax > vPeakLowest) && (iFound < p.Results.NumberMax))
% search for the bright spots
end
Быстрый поиск по StackExchange для аналогичной функции в C # приводит к ряду мнений о том, что, возможно, это не хороший стиль или дизайн кодирования.
Учитывая класс с методами, которые яхотите управлять параметрами / функциями для вычислений и выполнения, каков соответствующий дизайн, который реализует эту функцию?
Мне кажется, что интуитивно понятный ответ - иметь свойство для каждого из параметров со значениями, установленными по умолчанию.в конструкторе.Затем вызовите методы установки свойств для установки этих свойств перед вызовом метода.
varargin
предлагает удобный способ сделать это без необходимости создавать свойства для каждого отдельного параметра.
Is varargin
хороший подход или это приведет к неуправляемому коду / дизайну?