Jak mogę zadeklarować funkcję w MATLAB z opcjonalnymi argumentami?Opcjonalne argumenty w funkcjach MATLAB
Na przykład: function [a] = train(x, y, opt)
, gdzie opcja musi być opcjonalnym argumentem.
Jak mogę zadeklarować funkcję w MATLAB z opcjonalnymi argumentami?Opcjonalne argumenty w funkcjach MATLAB
Na przykład: function [a] = train(x, y, opt)
, gdzie opcja musi być opcjonalnym argumentem.
Istnieje kilka różnych opcji, jak to zrobić. Najbardziej podstawowym jest użycie varargin
, a następnie użycie nargin
, size
itd. W celu ustalenia, czy opcjonalne argumenty zostały przekazane do funkcji.
% Function that takes two arguments, X & Y, followed by a variable
% number of additional arguments
function varlist(X,Y,varargin)
fprintf('Total number of inputs = %d\n',nargin);
nVarargs = length(varargin);
fprintf('Inputs in varargin(%d):\n',nVarargs)
for k = 1:nVarargs
fprintf(' %d\n', varargin{k})
end
Nieco bardziej eleganckie rozwiązanie patrząc jest użycie klasy inputParser
zdefiniowanie wszystkich argumentów oczekiwanych przez funkcję, zarówno obowiązkowe i fakultatywne. inputParser
umożliwia również wykonywanie sprawdzania typów we wszystkich argumentach.
Prostym sposobem na to jest via nargin (N argumentów w). Minusem jest upewnienie się, że lista argumentów i sprawdzenia nargin są zgodne.
Warto pamiętać, że wszystkie wejścia są opcjonalne, ale funkcje wyjdą z błędem, jeśli wywoła zmienną, która nie jest ustawiona. Poniższy przykład ustawia wartości domyślne dla b i c. Wyjdzie, jeśli nie jest obecny.
function [ output_args ] = input_example(a, b, c)
if nargin < 1
error('input_example : a is a required input')
end
if nargin < 2
b = 20
end
if nargin < 3
c = 30
end
end
Dobrym sposobem będzie o to, aby nie używać nargin
, ale aby sprawdzić, czy zmienne zostały ustawione przy użyciu exist('opt', 'var')
.
Przykład:
function [a] = train(x, y, opt)
if (~exist('opt', 'var'))
opt = true;
end
end
Zobacz tę odpowiedź dla profesjonalistów to zrobić w ten sposób: How to check whether an argument is supplied in function call?
możliwe duplikat [Argumenty domyślne w Matlab] (http://stackoverflow.com/questions/795823/ default-arguments-in-matlab), [Odpowiednik Matlaba Pythona "None"] (http://stackoverflow.com/questions/1737523/the-matlab-equivalent-of-pythons-none), [Jak radzić sobie z par nazwy/wartości argumentów funkcji w MATLAB] (http://stackoverflow.com/questions/2775263/how-to-deal-with-name-value-pairs-ofunction-arguments-in-matlab) – Amro
Dobre dyskusje tego h http://blogs.mathworks.com/pick/2010/04/02/setting-default-values/ i tutaj http://blogs.mathworks.com/loren/2009/05/05/nice-way-to -set-function-defaults / –