Organización con una estructura
puede ingresar un struct
que tiene estos parámetros, ya que es campos.
Por ejemplo, una estructura con campos
setts.TrainNeg
.TrainPos
.nf
.nT
.factors
.removeEachStage
.applyEstEachStage
.removeFeatures
de esa manera al configurar los campos está claro lo que el campo es, a diferencia de una llamada a la función donde usted tiene que recordar el orden de los parámetros.
Luego, su llamada a la función se convierte en
[Model threshold] = detect(setts);
y su definición de función sería algo así como
function [model, threshold] = detect(setts)
Después, simplemente reemplazar las ocurrencias de ejemplo param
con setts.param
.
Enfoque mixto
También puede mezclar este enfoque con su actual, si lo prefiere, por ejemplo,
[Model threshold] = detect(in1, in2, setts);
si querían todavía explícitamente incluir in1
y in2
, y el paquete el resto en setts
.
enfoque de programación orientada a objetos
Otra opción es convertir a detectar en una clase. El beneficio de esto es que un objeto detect
tendría variables miembro con nombres fijos, en oposición a las estructuras donde si crea un error tipográfico al configurar un campo, simplemente crea un nuevo campo con el nombre mal escrito.
Por ejemplo
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
es posible encontrar algunas de las respuestas de aquí útil: [¿Cómo lidiar con los pares nombre/valor de los argumentos de funciones de MATLAB] (http://stackoverflow.com/q/2775263/97160) – Amro
echa un vistazo a 'parseArgs' en el intercambio de archivos. Lo uso todos los días: http://www.mathworks.com/matlabcentral/fileexchange/10670-parseargs-simplifica-input-processing-for-functions-with-multiple-options – slayton
@slayton - No sabía esto . Lo probaré. ¡Gracias! : D – Yamaneko