OOP subsref runs twice with "end"?

I have a simple object:
classdef objTest
methods
function [varargout]=subsref(obj,S)
disp(S)
varargout={[]}; %irrelevant for this test...
end
end
end
Now if I do o = objTest; o.test{1}(1:end), it displays S twice, first showing only the . and {} references, and then again showing all 3. Can anyone explain why this happens? I assume it's somehow related to a builtin function running to figure out how to evaluate the "end"?

 採用された回答

Matt J
Matt J 2014 年 10 月 20 日
編集済み: Matt J 2014 年 10 月 20 日

0 投票

I assume it's somehow related to a builtin function running to figure out how to evaluate the "end"?
Yes. The expression o.test{1}(1:end) is equivalent to
temp=o.test{1};
n=numel(temp);
o.test{1}(1:n);
So, subsref is called twice. If you had done o.test{end}(1:end), then it would have been called three times.

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeCustomize Object Indexing についてさらに検索

タグ

質問済み:

2014 年 10 月 20 日

編集済み:

2014 年 10 月 20 日

Community Treasure Hunt

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

Start Hunting!

Translated by