2011-11-04 11 views
5

leí in the documentation que puedo utilizar la instrucción echo on; tener MATLAB imprimir las declaraciones que ejecuta. Sin embargo, tengo dificultades para hacer que este funcione dentro de una función.MATLAB "echo sobre" dentro de una función. ¿Es posible?

Por ejemplo:

function do_something(foo) 

a = 2; 
echo on; 
foo = foo+1; 
disp('This is a test'); 
foo = foo+3; 

end 

Si llamo do_something(foo) desde la ventana de comandos, que estaba esperando a ver algo como:

foo = foo+1; 
disp('This is a test'); 
This is a test 
foo = foo+3; 

Sin embargo, en el ejemplo anterior, todas las impresiones de MATLAB es:

this is a test 

que no era lo que esperaba.

actualización

Como @Phonon explica a continuación, echo on es sólo para las secuencias de comandos (lo siento que me perdí!). Sin embargo, he leído en la documentación que pueda activar echo para una función dada de la siguiente manera:

echo fcnname on 

Así que mi pregunta ahora es, ¿hay una manera de activar el eco de una función utilizando alguna variación de la sintaxis anterior por lo que yo haga esto (llamo echo) dentro de una función? (La variable que contiene el nombre de la función, en este caso sería proporcionado por mfilename)

Actualización 2:

Por lo que yo entiendo que es no posible activar echo para una función particular dentro de la función real . Entre otras cosas, parece que MATLAB tiene que saber de antemano si la función tiene que funcionar en modo "eco" para evitar el uso de JIT.

+0

He actualizado mi respuesta. – Phonon

Respuesta

6

Según la documentación Matlab, es decir help echo,

ECHO ON enciende eco de comandos dentro de Script-archivos.

No funcionará dentro de las funciones. Para hacer que funcione para las funciones, de acuerdo con el mismo archivo de ayuda,

ECHO ON ALL convierte en el eco de comandos dentro de cualquier función archivos que están actualmente en la memoria (es decir, las funciones devueltos por INMEM).

ECHO OFF ALL todos ellos se apaga.

actualización:

el fin de encontrar qué función usted está en este momento, la mejor manera que veo de hacerlo es llamando dbstack.Va un poco de la siguiente manera:

[S,I] = dbstack; 
funcName = S.name; 
+0

Gracias Phonon. ¿Sabes cómo puedo activar "echo on" dentro de una función usando una declaración genérica (declaración no relacionada con la función), p. tal vez usando 'mfilename'? –

+0

No estoy seguro de entender su pregunta. 'echo on all' funcionará para todo, no es específico para una función dada. Si solo quiere que funcione para una determinada función, pero no para otras, debe desactivarla antes de llamar a algo desde su función. – Phonon

+0

Gracias @Phonon. He actualizado la pregunta original con una sección de actualización que explica lo que estoy tratando de hacer. –

1
echo fcnname on 

es lo mismo que

echo('fcnname','on'); 

Utilizando la sintaxis llamada a la función, se puede pasar una variable en lugar:

echo(found_found, 'on'); 
0

no lo hago pensar echo en trabajos dentro de una función. Siempre se puede encender fuera eco de la función, aunque utilizando el siguiente método:

foo = 1; 
echo do_something on; 
do_something(foo); 
echo do_something off; 

La única razón para no usar es decir, si desea que sólo una parte de su función para mostrar y no todas las líneas. Si insiste en ver la línea y el resultado de una parte específica de su función, de una manera burdade hacer esto para un número limitado de líneas sería:

pantalla
s = {'foo = 1;' 
    'foo = foo+1;' 
    'disp(''This is a test'');' 
    'foo = foo+3;' 
    'foo' 
    }; 
for i = 1:numel(s) 
    disp(s{i}); eval(s{i}); 
end 

Will:

foo = 1; 
foo = foo+1; 
disp('This is a test'); 
This is a test 
foo = foo+3; 
foo 

foo = 

    5  

También tengo que agregar que probablemente no usaría un método como este para la depuración. Hay mejores formas de descubrir qué está sucediendo dentro de una función.

Cuestiones relacionadas