As a toy example, I have a class that simply wraps a vector or matrix in an object and includes a timestamp of when it was created. I\'m trying to overload
I am working on a class to handle polynomials and polynomial matrices. I was having the same dificulty because I want different behaviors for the '.'
indexing in the cases of scalar polynomials and polynomial matrices.
In my case I want P.coef
to return a vector of coefficients if P
is a scalar polynomial. If P
is a polynomial matrix, P.coef
must return a cell array of the same size of P
, in which the cell {i,j}
contains the coefficient vector of the polynomial P(i,j)
.
The problem appeared when P.coef
was used with a matrix. My desired behavior returns only one object as an answer, but Matlab is expecting the function to return numel(P)
objects.
I found a very simple solution. When declaring subsref
, I used one mandatory output and a varargout
:
function [R,varargout] = subsref(P,S)
The body of the function defines R
as needed, according to my design. And at the very end of the function I added:
varargout(1:nargout-1) = cell(1,nargout-1);
To just return empty matrices as the extra outputs that Matlab wants.
This should create no problem if the function is always called with a single output argument, e.g., as in R = P.coef
. If the function is called without assigning, the user will see numel(P)-1
empty matrices, which is really not a big deal. Anyway, the user is warned about this in the function help.