How to make a function like eval ?

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

 Accepted Answer

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 Comment

Thanks ! Obviously I should have looked at the end of the eval function to find this evalin function !

Sign in to comment.

More Answers (1)

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 Comment

Arnaud
Arnaud on 13 Aug 2014
Edited: Arnaud on 13 Aug 2014
Thanks but I'd rather not modify my string.

Sign in to comment.

Categories

Find more on App Building in Help Center and File Exchange

Tags

Asked:

on 13 Aug 2014

Edited:

on 13 Aug 2014

Community Treasure Hunt

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

Start Hunting!