2009-07-01 13 views
5

Estoy utilizando clases y métodos estáticos para 'alcance' funciones en un espacio de nombres, similar a C#. Sin embargo, cada vez que agrego un nuevo método a una clase, al principio no se encuentra. Tengo que reiniciar el entorno MATLAB (2007a) para que se reconozcan los nuevos métodos.¿Cómo lograr que MATLAB reconozca los métodos estáticos recientemente agregados?

Seguramente hay un comando de 'actualización' o 'actualización' que puedo usar para no tener que reiniciar el entorno MATLAB cada vez que agrego una función.

Respuesta

6

que realiza esta llamada a CLEAR debe hacerlo:

efecto
clear classes 

Un lado desafortunado de esto es que también emite efectivamente un Borrar todos, que borra todas las variables en el espacio de trabajo, así (sin embargo, esto sucedería de todos modos cuando cierre y reinicie MATLAB). Esta eliminación del espacio de trabajo tiene realmente un propósito, ya que eliminará cualquier variable del mismo tipo que la versión anterior de de su clase, que potencialmente no funcionaría correctamente con la nueva versión de su clase.

La función REHASH puede trabajo, pero lo dudo (creo que tiene que ver más con rutas de archivos que las definiciones de clase).

+0

Eso sí funciona, ¡gracias! ¿Es posible hacerlo en una clase individual? – Brendan

+0

Hasta donde yo sé, no hay forma de utilizar CLEAR para actualizar las clases individuales que se han modificado. ¡Es todo o nada! =) – gnovice

+1

Rehash probado, ninguna de las opciones funciona. ¡Piensa que las clases claras son la única forma, aplausos! – Brendan

0

tratar "nombre de clase clara"

+0

Tengo miedo esto no funciona, lo acepta sin error pero la clase no se actualiza – Brendan

+0

Esto [debería funcionar con versiones más recientes de MATLAB] (http://www.mathworks.de/help/techdoc/matlab_oop/brzqjky.html) –

1

casos de compensación de la clase debería funcionar.

Suponga que tiene una instancia de "MyClass" en el espacio de trabajo de base:

foo = MyClass; 

Ahora, supongamos que edita MiClase y añadir nueva "barra" método estático:

foo.bar(); % Will cause error, as foo is instance of previous "MyClass" 

Sin embargo, "claro" foo -ing eliminará la referencia a la clase anterior:

clear('foo'); 
foo = MyClass; 
foo.bar(); % this should now work. 

Esto debería estar bien si solo tiene una o dos instancias de la clase en su espacio de trabajo base. Si tiene muchas instancias de la clase en su espacio de trabajo base, entonces es posible que desee escribir un guión para desactivarlas:

varList = whos; 
for iVar = 1:numel(varList) 
    if isequal('MyClass', varList(iVar).class) 
     clear(varlist(iVar).name); 
    end 
end 
clear('varList'); 
clear('MyClass'); 

si tiene instancias de la clase en más lugares, es posible que desee extender la secuencia de comandos según sea apropiado.

La última llamada para borrar el nombre de la clase solo podría ser necesaria si está realizando modificaciones en las clases en una jerarquía de herencia.

+0

ver también http://www.mathworks.de/help/techdoc/matlab_oop/brzqjky.html que también enumera las instancias que uno podría olvidarse fácilmente (por ejemplo, en funciones 'mlocked') –

Cuestiones relacionadas