How to make a function like eval ?

1 次查看(过去 30 天)
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

采纳的回答

dpb
dpb 2014-8-13
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 个评论
Arnaud
Arnaud 2014-8-13
Thanks ! Obviously I should have looked at the end of the eval function to find this evalin function !

请先登录,再进行评论。

更多回答(1 个)

Adam
Adam 2014-8-13
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

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by