È possibile definire più di un costruttore di classi in Matlab? Se sì, come?Costruttore di classi multiple Matlab
risposta
Ogni classe ha un costruttore. Tuttavia ... il costruttore può accettare qualsiasi numero e tipo di argomenti, compresi quelli basati su varargin
.
Così, per fornire la possibilità di un terzo argomento di default in Java si potrebbe scrivere qualcosa di simile (esempi basati su java documentation):
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
public Bicycle(int startCadence, int startSpeed) {
gear = 1;
cadence = startCadence;
speed = startSpeed;
}
in Matlab si potrebbe scrivere
methods (Access = public)
function self = Bicycle(varargin)
if nargin>2
gear = varargin{3};
else
gear = 1;
end
cadence = varargin{1};
speed = varargin{2};
end
end
No. I costruttori in MATLAB OOP sono molto limitati rispetto ad altre lingue. Non è esplicitamente indicato nella documentazione AFAIK che è possibile avere più costruttori, ma si riferisce al costruttore di una classe al singolare in tutta la documentazione.
http://www.mathworks.co.uk/help/techdoc/matlab_oop/brd2m9e-1.html
Ogni classe ha un solo costruttore, e ciascuno .m-file può contenere solo una definizione di classe.
Se si desidera avere una classe con piccole differenze a seconda dell'input, è possibile utilizzare proprietà che definiscono gli switch riconosciuti dai metodi della classe. Se si desidera avere classi molto diverse a seconda dell'input, è possibile creare una funzione generateClass
che chiamerà l'una o l'altra classe definita in file diversi. Naturalmente, se queste diverse classi hanno molti metodi e proprietà comuni, è possibile creare entrambe come sottoclassi in una superclasse comune.
Buon post ... ma nota al poster originale: sii veramente VERAMENTE attento all'eredità, ti dà un sacco di corda con cui impiccarti. Non ricorrere a questo se vuoi avere un costruttore predefinito e altri costruttori che possono inizializzare le variabili.Utilizzare varargin per ottenere questa funzionalità. – learnvst
Stessa classe, solo il processo di inizializzazione è diverso.Penso che passerò tutti i parametri necessari per costruire un'istanza in questi due modi e un mo re parametro che definirà il modo di costruire. Sporco ma veloce .. triste, la mia soluzione stava diventando così comprensibile .. peccato per te MATLAB! – bsmca
@bsmca: è sempre possibile definire i metodi (statici) che implementano i due diversi modi di creare, quindi si chiama uno di essi dal costruttore comune. Assicurati solo di creare l'oggetto prima o dopo, ma non all'interno di questi metodi. – Jonas
Il La risposta di Pursuit funziona, ma un utente che non ha familiarità con la funzione non può vedere quanti argomenti sono necessari o cosa servono. Vorrei raccomandare questo:..
methods (Access = public)
function self = Bicycle(startCadence, startSpeed, startGear)
if nargin>2
gear = startGear;
else
gear = 1;
end
cadence = startCadence;
speed = startSpeed;
end
end
Se ora si digita "Bicicletta (" e aspettare è possibile vedere almeno i tre argomenti La seconda possibilità non viene visualizzato anche se sembra possibile (ad esempio per la trama) ma io don Non so come fare.
Funziona davvero per te? Ottengo un "errore di argomenti di input non sufficiente" (MATLAB: minrhs) se non fornisco tutti gli argomenti (su 2014a eb). Questo sembra funzionare su funzioni "libere", ma non su costruttori/membri di classe. –
- 1. classi multiple all'interno: non()
- 2. classi multiple in ngClass
- 3. Matrici multiple in matrice di celle Matlab?
- 4. Spring MessageSource supporta percorsi di classi multiple?
- 5. Ereditarietà di classi multiple in TypeScript
- 6. associazioni di classi multiple/suddivise in sqlalchemy
- 7. multiple suggerimenti ingresso suggerimento per la funzione di Matlab
- 8. matlab multiple x axis uno sotto l'altro
- 9. Come si eseguono assegnazioni multiple in MATLAB?
- 10. Creazione di classi dinamicamente in matlab
- 11. costruttore di copia delle classi multiply-ereditate
- 12. Java: inizializzazione e costruttore di classi anonime
- 13. Costruttore di classi statiche in VB
- 14. classi di funzioni __attribute __ ((costruttore) sicure
- 15. Super classi multiple e riutilizzo del codice
- 16. Classi Enum multiple in un file Java
- 17. Classi multiple in un modulo Python
- 18. Multiple SearchRecentSuggestionsLe classi di prestatore nell'app per Android sono possibili?
- 19. Come ottenere l'istanza Microsoft.AspNet.HttpHttpContext in Costruttore di classi utilizzando DI
- 20. Come implementare il costruttore di classi in Visual Basic?
- 21. JvmNota per caricare annotazioni per il costruttore di classi primarie
- 22. questo non è definito errore nel costruttore di classi javascript?
- 23. È accettabile avere parametri nel costruttore di classi?
- 24. Un costruttore di classi C++ può conoscerne il nome istanza?
- 25. Come passare il parametro al costruttore di classi statiche?
- 26. JAX-RS classi multiple con lo stesso percorso
- 27. TinyIoC - Implementazioni multiple di interfaccia
- 28. Accesso alle classi Matlab nel codice MEX/C
- 29. Divisione dei dati in due classi visivamente in MATLAB
- 30. Come ereditare la documentazione dalle super classi in Matlab?
Si noti che non è possibile creare "sé" all'interno di un'istruzione if, quindi la prima volta che si assegna qualcosa a "self" deve venire prima o dopo la clausola if. – Jonas
ha finito con questa soluzione :) tnx! – bsmca