Using end as argument to function
16 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
James Tursa
2018 年 3 月 23 日
編集済み: James Tursa
2018 年 3 月 23 日
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 件のコメント
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.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Graphics Object Programming についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!