2009-02-02 7 views
9

decir que tenía el siguiente código:¿Hay alguna manera de llamar a una subfunción en el modo de célula en matlab?

% Cellmode_subfunction_test.m 
%% Cell 1 
foo(1); 

%% Cell 2 
foo(2); 

%% Definition of the foo subfunction 
function foo(num) 
disp(['num=' num2str(num)]); 

¿Cómo se puede probar la celda 1 y la celda 2 con la función parcial definida en el extremo?

Editar: Básicamente, cada una de las celdas de este ejemplo realiza algunos cálculos largos, por lo que me gustaría probarlas y depurarlas por separado. Estoy usando subfunciones para abstraer y reutilizar funcionalidades comunes y dado que hasta ahora esta funcionalidad solo se usa en esta aplicación particular, realmente no quiero ubicar a foo en un archivo m separado.

Editar (2): Acabo de recordar que recuerdo vagamente que el modo celda solo funciona en scripts de Matlab y no en archivos m de función y que las subfunciones y funciones anidadas no están permitidas en dichos scripts. Por lo tanto, lo que estoy pidiendo probablemente no sea posible.

Aunque la solución de función anónima dada a continuación es tal vez algo restrictiva ya que solo permite funciones de expresión única, de hecho fue suficiente para lo que deseaba hacer y por lo tanto lo he aceptado como una solución a mi problema.

+0

Disculpa, no pude ayudarte más. Para mayor claridad, ¿quiere agregar subfunciones a un archivo m, que solo será utilizado por ese archivo m, y para el cual no desea crear un archivo m completamente nuevo? – gnovice

+0

Tu segunda edición aclara las cosas. Es cierto, dentro de los archivos de script no puede tener subfunciones o funciones anidadas. Las funciones anónimas son la única forma de ir con scripts. La única otra opción es guardar foo como un archivo separado. – gnovice

Respuesta

5

CORRECCIÓN:

no he entendido bien el uso de la palabra CELL. Mis disculpas. Parece que simplemente quiere definir una función en la línea de comando sin guardarla en un archivo .m. Para ello, puede utilizar funciones anónimas:

foo = @(num) disp(['num=' num2str(num)]); 

continuación, puede utilizar "foo", como lo haría con cualquier otra función.

+1

Este no es el caso si mira el código provisto. Se trata de la capacidad de colocar el código MATLAB en "celdas" separadas para facilitar el desarrollo. –

+0

El código provisto no es claro en este punto. No puede colocar el código de MATLAB en celdas separadas de una matriz de celdas. PUEDE colocar identificadores de funciones en una matriz de celdas, como: fhArray = {@ foo1, @ foo2}. – gnovice

+0

Desafortunadamente eso no es lo que estoy tratando de hacer, pero gracias por intentar ayudar de todos modos. – snth

0

La forma en que normalmente lo manejo es usando dbstop en algún lugar dentro de la función principal. Luego tiene acceso a todas las funciones a las que normalmente tendría acceso la función principal. Si está trabajando con el editor de ML, solo use un punto de interrupción en la primera llamada a foo.

Espero que ayude.

Dan

Cuestiones relacionadas