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

 채택된 답변

James Tursa
James Tursa 2018년 3월 23일
편집: James Tursa 2018년 3월 23일

0 개 추천

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

Stephen23
Stephen23 2018년 3월 23일
편집: Stephen23 2018년 3월 23일
It is weird: why does it get interpreted as an indexing operation in the first place?
If a function handle has size 1x1, then why can't we create non-scalar function handles?
James Tursa
James Tursa 2018년 3월 23일
편집: James Tursa 2018년 3월 23일
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.
Michael
Michael 2018년 3월 23일
Sent a message to TMW. Thanks for the explanations of the phenomenon.

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

추가 답변 (0개)

카테고리

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

제품

질문:

2018년 3월 23일

댓글:

2018년 3월 23일

Community Treasure Hunt

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

Start Hunting!

Translated by