organizzazione con una struttura
è possibile introdurre un struct
che ha questi parametri come è campi.
Per esempio una struttura con campi
setts.TrainNeg
.TrainPos
.nf
.nT
.factors
.removeEachStage
.applyEstEachStage
.removeFeatures
In questo modo quando si impostano i campi è chiaro ciò che il campo è, a differenza di una chiamata di funzione in cui si deve ricordare l'ordine dei parametri.
Allora la vostra chiamata di funzione diventa
[Model threshold] = detect(setts);
e la tua definizione di funzione sarebbe qualcosa di simile
function [model, threshold] = detect(setts)
Poi basta sostituire le occorrenze di esempio param
con setts.param
.
approccio misto
Si può anche mescolare questo approccio con quello corrente, se si preferisce, per esempio
[Model threshold] = detect(in1, in2, setts);
se si voleva ancora includere esplicitamente in1
e in2
, e legare il resto in setts
.
approccio OOP
Un'altra opzione è quella di trasformare rilevare in una classe. Il vantaggio di questo è che un oggetto detect
avrebbe quindi variabili membro con nomi fissi, al contrario delle strutture dove, se si inserisce un errore quando si imposta un campo, si crea semplicemente un nuovo campo con il nome errato.
Per esempio
classdef detect()
properties
TrainNeg = [];
TrainPos = [];
nf = [];
nT = [];
factors = [];
removeEachStage = [];
applyEstEachStage = [];
removeFeatures =[];
end
methods
function run(self)
% Put the old detect code in here, use e.g. self.TrainNeg to access member variables (aka properties)
end
end
si potrebbe trovare alcune delle risposte da qui utile: [Come comportarsi con coppie nome/valore di argomenti di funzione in MATLAB] (http://stackoverflow.com/q/2775263/97160) – Amro
controlla 'parseArgs' sullo scambio di file. Lo uso tutti i giorni: http://www.mathworks.com/matlabcentral/fileexchange/10670-parseargs-semplifies-input-processing-for-functions-with-multiple-options – slayton
@slayton - Non sapevo questo . Lo proverò. Grazie! : D – Yamaneko