SORU
5 Mayıs 2010, ÇARŞAMBA


Nasıl başa MATLAB/değer işlev bağımsız değişken çiftleri için adı

Ad/değer çiftleri olarak isteğe bağlı bağımsız değişkenleri alır bir işlevi var.

function example(varargin)
% Lots of set up stuff
vargs = varargin;
nargs = length(vargs);
names = vargs(1:2:nargs);
values = vargs(2:2:nargs);

validnames = {'foo', 'bar', 'baz'};    
for name = names
   validatestring(name{:}, validnames);
end

% Do something ...
foo = strmatch('foo', names);
disp(values(foo))
end

example('foo', 1:10, 'bar', 'qwerty')

Çaba uygun değerleri (ve hala özellikle sağlam yine kötü belirtilen girdiler değil) açılan yer var gibi görünüyor. Bu ad/değer çiftleri işleme daha iyi bir yolu var mı? Yardım deposunda bulunan herhangi bir yardımcı işlevler var mı?

CEVAP
5 Mayıs 2010, ÇARŞAMBA


Benim seçenekleri kullanarak yapıları tercih ederim. Bu seçenekleri saklamak için kolay bir yol ve onları tanımlamak için kolay bir yol sağlar. Ayrıca, her şey daha kompakt hale gelir.

function example(varargin)

%# define defaults at the beginning of the code so that you do not need to
%# scroll way down in case you want to change something or if the help is
%# incomplete
options = struct('firstparameter',1,'secondparameter',magic(3));

%# read the acceptable names
optionNames = fieldnames(options);

%# count arguments
nArgs = length(varargin);
if round(nArgs/2)~=nArgs/2
   error('EXAMPLE needs propertyName/propertyValue pairs')
end

for pair = reshape(varargin,2,[]) %# pair is {propName;propValue}
   inpName = lower(pair{1}); %# make case insensitive

   if any(strcmp(inpName,optionNames))
      %# overwrite options. If you want you can test for the right class here
      %# Also, if you find out that there is an option you keep getting wrong,
      %# you can use "if strcmp(inpName,'problemOption'),testMore,end"-statements
      options.(inpName) = pair{2};
   else
      error('%s is not a recognized parameter name',inpName)
   end
end

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Exalto_Gamer

    Exalto_Gamer

    15 EKİM 2014
  • Gimpology.com Video Tutorials

    Gimpology.co

    3 ŞUBAT 2008
  • Yanko Kral

    Yanko Kral

    8 HAZİRAN 2006