Borrar filtros
Borrar filtros

How to make a function like eval ?

1 visualización (últimos 30 días)
Arnaud
Arnaud el 13 de Ag. de 2014
Editada: Arnaud el 13 de Ag. de 2014
Hello,
I need a modified eval function. For example, I have in my workspace :
Nx = 3;
mystring = '1+2*Nx';
is_string = false; % treat it as matlab code
is_string2 = true; % treat it as text
I want to run the following lines :
if is_string, out = mystring,
else out = eval(mystring),
end
if is_string2, out2 = mystring,
else out2 = eval(mystring),
end
I am looking for a way to put this in a function :
Nx = 3;
mystring = '1+2*Nx'
is_string = false; % treat it as matlab code
is_string2 = true; % treat it as text
out = my_eval(mystring,is_string) % returns 7
out2 =my_eval(mystring,is_string2) % returns '1+2*Nx'
Anybody knows how to do this ?
Thanks

Respuesta aceptada

dpb
dpb el 13 de Ag. de 2014
function out=my_eval(in,isStr)
if isStr
out=in;
else
out=evalin('caller',in);
end
doc evalin % for details/limitations
Might also consider using function handles and, perhaps creating dynamically an anonymous function handle which is then evaluted...depends on the end use.
  1 comentario
Arnaud
Arnaud el 13 de Ag. de 2014
Thanks ! Obviously I should have looked at the end of the eval function to find this evalin function !

Iniciar sesión para comentar.

Más respuestas (1)

Adam
Adam el 13 de Ag. de 2014
I would define as follows:
Nx = 3;
myFunc = @() 1 + 2*Nx
then
out = my_eval( myFunc, is_string )
would contain something like:
if is_string
out = strrep( func2str( myFunc ), '@()', '' )
else
out = myFunc();
end
  1 comentario
Arnaud
Arnaud el 13 de Ag. de 2014
Editada: Arnaud el 13 de Ag. de 2014
Thanks but I'd rather not modify my string.

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by