Since when has it been possible to dot-index the output of a class method?

2 views (last 30 days)
Catalytic
Catalytic on 18 May 2022
Commented: Matt J on 19 May 2022
Since when has it been possible to directly dot-index the output of a class method call, like this -
classdef myClass
properties
p
end
methods
function obj=myClass(val)
obj.p=val;
end
function obj=increment(obj)
obj.p=obj.p+1;
end
end
end
obj=myClass(2)
obj =
myClass with properties: p: 2
obj.increment.p
ans = 3
And why then, it is still not possible to do something similar with function calls -
subfunc.a
Error: File: test.m Line: 1 Column: 1
Using the dot operator to index into the output of function 'subfunc' is not
supported.
function S=subfunc()
S.a=1;
S.b=2;
end
  1 Comment
Matt J
Matt J on 18 May 2022
Quite intriguing. It works with brace indexing, too:
classdef myClass
properties
p
end
methods
function obj=myClass(val)
obj.p=val;
end
function out=num2cell(obj)
out=num2cell(obj.p);
end
end
end
obj=myClass([30,10,70]);
obj.num2cell{1}
ans = 30
obj.num2cell{3}
ans = 70

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 19 May 2022
Since R2019b.
Indexing: Use dot indexing into function calls
You can now use dot indexing to index into the result of a function call. MATLAB evaluates the function and then applies the dot indexing operation to the result.
For example, this function creates a structure:
function out = createStruct(in)
out = struct("aField", in);
end
You can call this function and immediately access the structure field it creates:
createStruct(3).aField
For more information, see Indexing into Function Call Results.
  3 Comments
Matt J
Matt J on 19 May 2022
Interestingl, though, none of those restrictions seem to apply for class methods, including Static methods,
classdef myclass
methods (Static)
function s=method1
s.a=1;
end
function s=method2
s={10,20,30};
end
end
end
myclass.method1.a
ans = 1
myclass.method2{3}
ans = 30

Sign in to comment.

More Answers (0)

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!