我有一个名为foo的类,只有属性M
,
classdef foo
properties
M
end
methods
function obj = foo(arg1)
M=arg1;
end
end
end
我创建了对象:
F=foo(1)
在C ++中,当我调用F
时,我可以直接获得一个选定变量的值。在我的情况下,当我写F.M
时,我想获得F
。例如,这将允许写
size(F)
而不是写
size(F.M)
或为我的班级定义方法size
。在MATLAB中有没有办法实现这个目标?
编辑:换句话说,每当我写F
时,我都希望MATLAB将其读作F.M
。
编辑:我将澄清我想要取得的成就。 我的类代表一个矩阵,其值是具有紧凑支持的多元无限序列。因此,我必须做很多簿记,不要混淆所有指数。我想用矩阵做的事情:
我认为当我将所有元数据(这是序列的第0个条目的索引)与数据一起封装时,这更容易实现。 因为我的类实际上是一个矩阵,所以大多数操作都以与普通矩阵相同的方式在该类上工作。因此,我不想再重复编码(因为代码维护,更少的错误,代码可读性)。
在C ++中,我可以这样做。看来,我对这个问题的处理方法在MATLAB中是错误的。
答案 0 :(得分:0)
你必须重载我在评论中提到的函数size
。
classdef foo
properties
M
end
methods
function obj = foo(arg)
obj.M = arg;
end
function varargout = size(obj, varargin)
if nargin == 1
varargout = size(obj.M);
elseif nargin == 2 && nargout == 1
varargout = size(obj.M, varargin{1})
else
error('Wrong number of input or output arguments.')
end
end
function ret = mtimes(varargin)
try
ret = varargin{1}.M * varargin{2};
catch
ret = varargin{1} * varargin{2}.M;
end
end
end
end
控制台输出:
>> F=foo(0:3);
>> size(F)
ans =
1 4
>> size(F, 2)
ans =
4
>> F*(4:7).'
ans =
38
>> (4:7).'*F
ans =
0 4 8 12
0 5 10 15
0 6 12 18
0 7 14 21
我可以继续但是为StackOverflow准备控制台输出是可怕的......