How to dynamically execute code stored in a string variable

I do a small toolbox to ease ODE simulation. The script until now works well like this:
(example)
ev1 = @(T,Y)ev1(T,Y,a);
options = odeset('Events',ev1,... ...);
But given that the script should read plenty of event functions and make a list for a pop-up so the user could select them easy, I want it to check in a certain folder for all the files that are functions. The user will simply create the files like this:
% eventFile @(T,Y)ev1(T,Y,...other parameters...);
function [value,isterminal,direction+ = .... ....
... ...
end
the program would read the first line of all the files and if it finds eventFile keyword will save the @(T,Y.....; in a string. Can this string be converted or be used to construct an object like this: ev1 = @(T,Y)ev1(T,Y,a); so I can put it in the odeset 'Event' parameter, just like ev1 in the first example?
If you think this could be done in a different way and I should completely change my plans please tell me.
I tried to make this short and clear, but if I wasn't clear enough, tell me and I will try to explain my problem better.
Later edit: the previous title was "How can I convert a strings like "@(T,Y)event(T,Y,a)" in a function object just like ev = @(T,Y)event(T,Y,a);"

 채택된 답변

per isakson
per isakson 2014년 11월 1일
편집: per isakson 2014년 11월 1일
"an object like this ev1 = @(T,Y)ev1(T,Y,a); " &nbsp that is an Anonymous Functions
Try
>> ev1 = @(t,y) fprintf('ev1: %d, %d\n', t, y )
>> str = '@(T,Y) ev1(T,Y)';
>> foo = eval( str );
>> foo(1,2)
returns
ev1: 1, 2

댓글 수: 2

mihai
mihai 2014년 11월 1일
편집: mihai 2014년 11월 1일
Thank you! This eval function is amazing... I didn't expected it to exist.
Now, I know the question I made is not so general.. should I edit it? Any advice for a better title?
per isakson
per isakson 2014년 11월 1일
편집: per isakson 2014년 11월 1일
I think this is a justifiable use of &nbsp eval. &nbsp However, it should be the used only as a last resort.
Maybe, "How to dynamically execute code stored in a string variable" would be a better title.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Simulink Environment Customization에 대해 자세히 알아보기

질문:

2014년 10월 31일

편집:

2014년 11월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by