2013-09-27 2 views
2
function y = myFunc(tR,mode) 

if ~isfield(tR, 'isAvailable') 
    tR.isAvailable= false; 
end 

if tR.isAvailable 
y = fullfile(workingFolder,'file.txt'); 
else 
y = ''; 

switch(mode) 
case '1' 
.....  
case '2' 
..... 
end 
end 

, когда я называю MyFunc (Tr, «1») it'es OK , но я хотел бы также, чтобы быть в состоянии назвать MyFunc иногда без режима просто MyFunc (Tr)вызов функции MATLAB без всех своих аргументов

Как я могу сказать, что в некоторых случаях функция myFunc не выполняет случай переключения, когда параметр varaible не указан в аргументах?

ответ

1
  1. Использование exist, вероятно, опрятный и самый простой способ сделать это, если вы хотите, чтобы исключить элементы «в конце», хотя nargin может также сделать трюк. В общем, я бы использовал nargin, если переменные имеют значащие позиции или бессмысленные имена и exist, только если они имеют значащие имена. See this question for more about this choice.

  2. Использование varargin, вероятно, является самым простым способом сделать это, если вы хотите исключить элементы в целом.

  3. Однако, если вы просто хотите, чтобы исключить элемент 1 в середине, простая альтернатива будет:

Если вы не хотите использовать mode, дать ему в качестве [], то вы поставить переключатель заявление в следующем:

if ~isempty(mode) 
    % Your switch statement here 
end 

конечно риск, что странные вещи будут происходить, если вы забыли использовать if заявление позже в той же функции.

+0

«Наргин» так же просто реализовать, как и ваша идея «NaN», но имеет гораздо больший смысл и позволяет вызывать функцию с помощью одного аргумента. Я рекомендую против взлома «NaN». – Dan

+0

да, но когда я вызываю функцию myFunc (tR), я получил ошибку, как если бы режим был нан? – lola

+0

@lola Обходное решение «NaN» не является решением для вызова вашей функции с помощью 1 элемента, это просто позволяет вам называть ее как «myFunc (tR, NaN)» и избегать оператора switch. Если режим - это ваш последний аргумент ввода, это не принесет многого, но если ваша функция выглядит так: 'muFun (a, mode, b, c, d, e, f, g, h)' это сэкономит вам работу обработки 'mode' и всех возвращающих входных аргументов. –

0

Вы можете использовать varargin, но вам нужно получить доступ к параметрам по-другому. Кроме того, проверьте с nargin, сколько аргументов у вас есть.

http://www.mathworks.de/de/help/matlab/ref/varargin.html

Ваше объявление функции в следующей редакции:

function y = myFunc(tR, varargin) 
2

Использование nargin в функции, чтобы обеспечить некоторые умолчания входы, когда не хватает входов предоставляются пользователем.

+0

'nargin' это путь здесь. Предложения 'varargin' излишни, если у вас есть только один необязательный аргумент. Это будет самый чистый и самый простой способ. – Dan

2

answer by Dennis Jaheruddin дает хороший список возможностей, но я также найти применение exist полезный метод:

if exist('mode', 'var') 
    % Your switch statement here 
end 
+1

Как вы уже описали мой ответ в виде списка, я был настолько свободен, чтобы включить этот список в список! –

+0

@DennisJaheruddin приветствуются –

Смежные вопросы