Using end as argument to function
24 views (last 30 days)
Show older comments
So today i noticed something i think is weird.
Say i define an anonyomous function.
f = @(x) ... Now if i input f(end) it will evaluate the function at f(1).
Is this a bug or is there a reason for this behaviour?
Regards Michael
0 Comments
Accepted Answer
James Tursa
on 23 Mar 2018
Edited: James Tursa
on 23 Mar 2018
Weird, but it does match the doc for end:
"... end = (size(x,k)) when used as part of the kth index ..."
E.g.,
>> f = @(x)x+5
f =
@(x)x+5
>> size(f,1)
ans =
1
>> f(1)
ans =
6
>> f(end)
ans =
6
f(end) appears as an indexing expression to MATLAB. Since the size of the f variable is 1x1, it uses 1 for end.
3 Comments
James Tursa
on 23 Mar 2018
Edited: James Tursa
on 23 Mar 2018
Seems the parser processes the 'end' first and effectively does a replacement, without regard to whether the variable in question is a function handle or not. It does have a weird effect, however, in that the index itself gets magically turned into an argument for the function handle. E.g., using the same example:
>> f = @(x)x+5
f =
@(x)x+5
>> f(end-5)
ans =
1
>> f(end+10)
ans =
16
So IMO this behavior should be disallowed and should throw an error. But that may mean the parser would have to be smarter and examine the variable class before doing the replacement. Maybe a bug report or enhancement request to TMW is in order.
More Answers (0)
See Also
Categories
Find more on Get Started with MATLAB in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!