2012-01-16 7 views

risposta

9

In breve, è necessario utilizzare una sorta di riferimento esplicito.

Prima di tutto, a differenza di C++/C#/Java in cui è denominato questo, è possibile utilizzare qualsiasi nome desiderato. Il motivo per cui è necessario utilizzare chiamate esplicite è Matlab designers decision. L'idea era di supportare le operazioni vettoriali Matlab sugli oggetti, come se fossero strutture . Il seguente è un frammento dal link qui sopra:

Mentre le lingue con un parametro oggetto implicita forniscono una "questa" parola chiave per accedere all'oggetto implicita, che di solito non richiedono di accedere a una proprietà attraverso "questo ". Se MATLAB aveva proprietà implicite, l'estensione logica agli oggetti basati su array sarebbe quella di indicizzare nel nulla:
S = S + (k) .Valore;

Edit: A seguito del buon commento di @AndrewJanke, vorrei aggiungere che MATLAB avrebbe potuto avere questo riferimento implicito, e solo la forza di utilizzarlo in indicizzazione di oggetti basati su array . Tuttavia, questo approccio non è stato scelto dai progettisti di MATLAB.

+0

I metodi di classe Python non sono necessari per denominare il riferimento di istanza esplicativo 'self'. È anche una convenzione, come in MATLAB. –

+0

@ AndréCaron, grazie, ho aggiornato la mia risposta. –

+0

Penso che questa lettura trascuri la ragione principale: dispacciamento multiplo, indirizzato in modo obliquo con "simmetria tra più parametri di oggetto" nell'articolo collegato. Per esempio. per un metodo 'f (A, B, C)', qualsiasi input potrebbe essere il metodo dispatch object, oppure potrebbero concettualmente essere peer, quindi non è chiaro a priori quale dovrebbe diventare 'this'. Potrebbe anche essere chiamato come 'f (2, 3, X)'. La preoccupazione sull'indicizzazione potrebbe essere risolta avendo un parametro implicito 'this' e richiedendo semplicemente di usarlo quando si utilizzava'() '-indexing all'interno del metodo, come in C++ se si chiama overloaded' [] '. (Penso.) –

Problemi correlati