2012-10-17 19 views
11

Próbowałem połączyć niestandardową klasę z wbudowanymi funkcjami, a ja zająłem się sytuacją, którą mogłem rozwiązać tylko przez eval, chciałbym "czystszy" sposób.Wywołanie funkcji o zmiennej liczbie wyjściowej

Zasadniczo funkcja wbudowana jest zdefiniowana jako varargout=blabla(varargin) Zdefiniowałem funkcję overriden w klasie niestandardowej, jako varargout=blabla(varargin). Funkcja wygląda następująco:

function varargout=blabla(varargin) 
    varargout=blabla(function_of_varargin) 
end 

Funkcja varargin przekształca go z klasy niestandardowej do kla wbudowanych.

Ale to nie działa tak jak jest: Zasadniczo, gdy wbudowana funkcja jest wywoływana wewnątrz funkcji przesłaniania, widzi tylko jeden parametr wyjściowy (varargout), nawet jeśli niestandardowa nadpisywana funkcja jest wywoływana z więcej niż jednym parametrem wyjściowym .

Rozwiązałem go w zasadzie nazywając to:

[varargout{1},varargout{2},...,varargout{nargout}]=blabla(function_of_varargin) 

Konstruowanie LHS z pętlą i eval-ing.

+1

spójrz na [Jak mogę przeciążać wbudowane funkcje MATLAB?] (Http://www.mathworks.nl/support/solutions/en/data/1-18T0R/index.html?product=ML&solution= 1-18T0R) –

Odpowiedz

7

Czy próbowałeś to:

[varargout{1:nargout}] = blabla(varargin{:}) 

?

+0

Cóż, co wiesz, kiedy wiedza matlab jest sucha, zawsze jest jakaś magiczna składnia, aby działała. Działa idealnie, Dzięki – rienafairefr

+0

+1 dobry połów :) Nie ogranicza się to do klas i funkcji członka. Działa również dla zwykłych funkcji. – angainor

+0

@angainor: Yup. Rozszerzanie komórek rozszerzone na tablice komórek 'varargin' i' varargout' - często pomijane. To naprawdę zwykłe macierze komórkowe :) –

Powiązane problemy