Filter löschen
Filter löschen

How to make a function like eval ?

1 Ansicht (letzte 30 Tage)
Arnaud
Arnaud am 13 Aug. 2014
Bearbeitet: Arnaud am 13 Aug. 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

Akzeptierte Antwort

dpb
dpb am 13 Aug. 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 Kommentar
Arnaud
Arnaud am 13 Aug. 2014
Thanks ! Obviously I should have looked at the end of the eval function to find this evalin function !

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Adam
Adam am 13 Aug. 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 Kommentar
Arnaud
Arnaud am 13 Aug. 2014
Bearbeitet: Arnaud am 13 Aug. 2014
Thanks but I'd rather not modify my string.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by