Aslında, Mikhail'in cevabı pek doğru değil. Bazı fonksiyonların, hiçbiri istenmediyse bile bir değer döndüren bir fonksiyon olması durumunda, bir fonksiyonun değerin ans olarak atanması gerektiğini ifade etmesi durumunda, Mikhail'in ambalajı başarısız olacaktır. birFonksiyon günah ile değiştirilmiştir ve doğrudan günahı çalıştıran karşı sarmalayıcı çalışan karşılaştırıldığında Örneğin, göreceğiniz:
>> wrapper(0)
>> sin(0)
ans =
0
Bunu yapmanın doğru yolu bu işleri nedeni
function varargout = wrapper(varargin)
[varargout{1:nargout}] = someFunction(varargin{:});
olduğunu MATLAB endeksleme kurallarındaki az bilinen bir durum nedeniyle, bu durum için en azından R2006a (muhtemelen daha uzun) olduğundan tam olarak var. MATLAB indekslemede bir siğildir ama bu tür şeylerin üstesinden gelmek için gerekli görülmüştür.
kural şudur:
eğer indisli atama yaparken
- -subscripted atama başlatılmamış değişkene VE
- başlatılmamış değişken kıvırcık bağ endeksli olduğunu, VE
- küme parantezindeki dizin boş, VE
- sol taraf köşeli parantez içinde görünür ve
- sağ taraf/bir değere giderir
sonra başlatılmamış değişken sağ taraftaki tarafından döndürülen bir değer içeren bir skaler hücre atanan bir çıkış verir. Örneğin
:
>> clear uninit % just to make sure uninit is uninitialized
>> [uninit{[]}] = sin(0)
uninit =
[0]
+1 vermez ve bu derin içgörülere teşekkürler! Yukarıdaki kuralları nereden aldınız? – Mikhail
Eh, dürüst olmak gerekirse, kaynak koduna erişiminiz varsa yardımcı olur ... Ben MathWorks için çalışıyorum. Bunun resmi olarak herhangi bir yerde belgelenmiş olup olmadığından emin değilim. Gelişmiş kullanıcıya yardımcı olan, ancak yeni başlayanları kolayca tamamen karıştıran şeylerden biri. Ancak, bu davranışın değişmeyeceğinden eminim çünkü bu davayı ele almak için gerekli. – SCFrench
Paylaştığınız için teşekkürler, bu beni uzun zamandır dile getirdi! – Erik