Perché in ogni classe in MATLAB devo usare "questo"? Penso che in C++ non ho bisogno di usare "questo", solo se lo voglio. Questo è anche il caso in MATLAB?L'uso di "questo" in ogni classe MATLAB
risposta
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.
- 1. lunghezza MATLAB di ogni elemento in array di celle
- 2. Caricamento di ogni classe in un pacchetto
- 3. MATLAB: estrai ogni ennesimo elemento del vettore
- 4. Jquery $() ogni metodo oscura 'questo' parola chiave
- 5. come moltiplicare ogni riga con ogni riga di un'altra matrice elementwise in matlab?
- 6. Cosa fa questo simbolo primo - MATLAB?
- 7. Comando Matlab per accedere all'ultima riga di ogni file?
- 8. Come preallocare una matrice di classe in MATLAB?
- 9. MATLAB: Riempimento di una matrice con ogni colonna uguale
- 10. Perché (in MATLAB) questo codice è più veloce?
- 11. Per ogni funzione della classe in python
- 12. possibile sovraccaricare la funzione nella classe MATLAB?
- 13. per ogni proprietà di classe in Excel VBA
- 14. Aggiornamento di un campo in ogni elemento di un array di strutture Matlab
- 15. css: ogni supporto di classe: hover state?
- 16. addEventHandler a ogni elemento di una classe
- 17. Posso assegnare i tipi alle proprietà della classe in MATLAB?
- 18. sizeof (* Questo) a definizione di classe
- 19. accesso esterno classe questo caso
- 20. Questo ciclo foreach chiama Split() ogni iterazione in C#?
- 21. Rimozione di ogni altro elemento in NumPy
- 22. Ho molto di più di 3 elementi in ogni classe, ma ottengo questo errore: classe non può essere inferiore a k = 3 in scikit-learn
- 23. Maiuscola/maiuscola prima lettera di ogni parola in una stringa in Matlab?
- 24. Chiamare un metodo in una classe in ogni altro metodo
- 25. Creazione di classi dinamicamente in matlab
- 26. Aggiunta di attributi aggiuntivi per ogni proprietà di una classe
- 27. MATLAB: media di calcolo di ogni intervallo di 1 minuto di una serie temporale
- 28. vettorizzato se in matlab
- 29. Clustering agglomerato in Matlab
- 30. Esiste un modo migliore per implementare questo codice MATLAB?
I metodi di classe Python non sono necessari per denominare il riferimento di istanza esplicativo 'self'. È anche una convenzione, come in MATLAB. –
@ AndréCaron, grazie, ho aggiornato la mia risposta. –
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.) –