1classdef foo_subsref_subsasgn < handle 2 properties 3 x 4 end 5 6 methods 7 function obj = foo_subsref_subsasgn (dims) 8 switch (dims) 9 case 1 10 obj.x = 1:4; 11 case 2 12 obj.x = eye (4); 13 otherwise 14 error ('foo_subsref_subsasgn:SyntaxError', ... 15 'foo_subsref_subsasgn: Invalid syntax'); 16 end 17 end 18 19 function ind = end (obj, k, n) 20 sz = size (obj.x); 21 if k < n 22 ind = sz(k); 23 else 24 ind = prod (sz(k:end)); 25 end 26 end 27 28 function varargout = subsref (obj, S) 29 switch (length (S)) 30 case 1 31 if (S(1).type == "()") 32 varargout = {obj.x(S(1).subs{1})}; 33 elseif (S(1).type == "{}") 34 % Note in ML R2018b "x{1:3}" expects "nargout == 3". 35 varargout = num2cell (obj.x(S(1).subs{1})); 36 elseif (S(1).type == "." && S(1).subs == 'x') 37 varargout = {obj.x}; 38 else 39 error ('foo_subsref_subsasgn:SyntaxError', ... 40 'foo_subsref_subsasgn: Invalid syntax'); 41 end 42 case 2 43 % Note in ML R2018b "x(1)(1)" is not allowed. 44 if (S(1).type == "{}" && (S(2).type == "{}" || S(2).type == "()")) 45 varargout = {obj.x(S(1).subs{1}, S(2).subs{1})}; 46 elseif (S(1).type == "." && S(1).subs == 'x' ... 47 && (S(2).type == "{}" || S(2).type == "()")) 48 varargout = {obj.x(S(2).subs{1})}; 49 else 50 error ('foo_subsref_subsasgn:SyntaxError', ... 51 'foo_subsref_subsasgn: Invalid syntax'); 52 end 53 otherwise 54 error ('foo_subsref_subsasgn:SyntaxError', ... 55 'foo_subsref_subsasgn: Invalid syntax'); 56 end 57 end 58 59 function obj = subsasgn (obj, S, varargin) 60 switch (length (S)) 61 case 1 62 if (S(1).type == "{}" || S(1).type == "()") 63 obj.x(S(1).subs{1}) = varargin{1}; 64 elseif (S(1).type == "." && S(1).subs == 'x') 65 obj.x = varargin{1}; 66 else 67 error ('foo_subsref_subsasgn:SyntaxError', ... 68 'foo_subsref_subsasgn: Invalid syntax'); 69 end 70 case 2 71 % Note in ML R2018b "x(1)(1)" is not allowed. 72 if (S(1).type == "{}" && (S(2).type == "{}" || S(2).type == "()")) 73 obj.x(S(1).subs{1}, S(2).subs{1}) = varargin{1}; 74 elseif (S(1).type == "." && S(1).subs == 'x' ... 75 && (S(2).type == "{}" || S(2).type == "()")) 76 obj.x(S(2).subs{1}) = varargin{1}; 77 else 78 error ('foo_subsref_subsasgn:SyntaxError', ... 79 'foo_subsref_subsasgn: Invalid syntax'); 80 end 81 otherwise 82 error ('foo_subsref_subsasgn:SyntaxError', ... 83 'foo_subsref_subsasgn: Invalid syntax'); 84 end 85 end 86 87 end 88end 89