MATLAB Answers

Fangjun Jiang
3

M-function in a M-script

Asked by Fangjun Jiang
on 18 May 2011
Latest activity Answered by Bart
on 19 Dec 2016
When I write M-scripts (It's a script, not an M-Function), sometimes I want to have a quick and dirty function, such as:
test1.m
a=1;
b=MyFunction(a)
Function y=MyFunction(x)
y=x/2;
end
But it is not allowed because "FUNCTION keyword is invalid heare". I have to create another M-file called MyFunction.m to define MyFunction.
Why is that? What is the rational behind it?
I know I can work this way:
test2.m
function test2
a=1;
b=MyFunction(a)
end
function y=MyFunction(x)
y=x/2;
end
Although no need to specify the argument for function test2, still, I have to add the first line for function test2, add an "end" for function test2. And worst of all, no easy access to base workspace data.

  0 Comments

Sign in to comment.

2 Answers

Sean de Wolski
Answer by Sean de Wolski
on 18 May 2011
 Accepted Answer

  4 Comments

Show 1 older comment
Earl Glynn on 26 Jul 2015
It's four years later and Matlab still does not allow functions in a script.
I don't understand the point of Matlab markup when it's impossible to include a function as part of the script. Simple educational "howto" examples including functions using Markup are not possible.
I don't understand those saying scripting in Matlab is bad, when functions with dozens of arguments exist, which are as bad or worse, are nearly incomprehensible and difficult to debug.
A simple "driver" markup script to explore other MatLab code seems quite desirable. But I guess I should explore Jupyter as an alternative since it looks like functions will never be allowed in Matlab scripts. I don't understand why when many other languages allow function definitions almost anywhere.
Walter Roberson
on 26 Jul 2015
Let me think: Fortran... C... C++... VBA... java 7 and earlier... Nope, none of those have functions as first class objects that can be defined almost anywhere.
Scripting is like leaving broken glass on the floor. If you know where it is and always remember to walk around it, it isn't going to be a problem.
Saying that functions with dozens of arguments are "as bad or worse" is like saying that if you provide people with pieces of metal and grindstones then that is worse than glass on the floor because some people might leave dangerous metal burrs on the things they shape.
I accidentally broke a bottle on my back walk yesterday. I swept it up, but I couldn't get at the slivers in some of the cracks, and it's pretty likely that my feet will discover a missed sliver at some point.

Sign in to comment.


Bart
Answer by Bart
on 19 Dec 2016

I believe this is possible since version R2016b. See https://www.mathworks.com/help/matlab/matlab_prog/local-functions-in-scripts.html.

  0 Comments

Sign in to comment.