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

16 views (last 30 days)
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.
  7 Comments
Bruno Luong
Bruno Luong on 21 Jul 2022 at 5:39
It does not do what you want but it runs without error
figure(gcf().Number).Name = 'hello'
figure = struct with fields:
Name: 'hello'

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!