How to avoid writing a script function ?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Patrick Mboma
am 15 Feb. 2012
Bearbeitet: ebi
am 14 Okt. 2013
Dear all, I have the following problem: I would like to avoid writing a function as an m-file. Instead (and ideally) I would like to have it created as an anonymous function handle. The m-file equivalent of the function could look as complicated as the following:
function [a,b,c]=myfunc(d,e,f,g)
a=myfunc2(d,e,f);
if a>0
b=[];
c=[];
return
end
[b,c]=myfunc3(a,d,e,f,g);
Originally I thought a shortcut would be to simply create the m-file, create a handle to it and then delete the m-file. But I quiclkly realized it would not work. Is there any way to do to it, even using objects in some way or another?
Thanks, Patrick
2 Kommentare
per isakson
am 15 Feb. 2012
"Warum soll man es einfach machen, wenn man es so schön komplizieren kann". Seriously, I need a better description to understand what you may gain by such a construct.
Akzeptierte Antwort
Daniel Shub
am 15 Feb. 2012
Maybe another person chiming in will convince you this is a bad idea. That said, if I had to go down this road I would probably approach it something like I suggested here: http://www.mathworks.com/matlabcentral/answers/14512-cellfun-for-objects
3 Kommentare
Daniel Shub
am 15 Feb. 2012
I would guess that it could "work" with "if" statements. There is very little that cannot be accomplished with eval statements. That said, they make understanding and maintaining the code much more difficult and often eval makes writing the code more difficult too.
Weitere Antworten (2)
Jan
am 15 Feb. 2012
The M-file is fine and runs fast. Are you sure that you need an anonymous function?
4 Kommentare
Jan
am 16 Feb. 2012
I still do not see the drawback of the M-files. Of course you have to remove a loaded file from the memory using CLEAR FILENAME, after the file has been modified.
But I agree that even creating a large number of M-files dynamically means a very high complexity and slow execution speed. Loading and parsing an M-file the first time needs a lot of resources.
Anyhow, I'm sure you will remember our warnings when they will get important in the future. And if they are not getting important, this is even better! Good luck.
Walter Roberson
am 15 Feb. 2012
It is not possible to construct an anonymous function that specifies returning multiple outputs.
3 Kommentare
Teja Muppirala
am 16 Feb. 2012
You can return multiple outputs from an anonymous function by using DEAL, for example:
F = @(x) deal( x, 2*x, 3*x )
[a,b,c] = F(10)
Siehe auch
Kategorien
Mehr zu Function Creation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!