调用类时直接返回属性(Matlab)

时间:2017-11-14 08:33:26

标签: matlab oop

我有一个名为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

编辑:我将澄清我想要取得的成就。 我的类代表一个矩阵,其值是具有紧凑支持的多元无限序列。因此,我必须做很多簿记,不要混淆所有指数。我想用矩阵做的事情:

  • 矩阵乘法。
  • 卷积。
  • 上采样,下采样。<​​/ li>
  • 矢量/矩阵空间中可能存在的所有其他内容。

我认为当我将所有元数据(这是序列的第0个条目的索引)与数据一起封装时,这更容易实现。 因为我的类实际上是一个矩阵,所以大多数操作都以与普通矩阵相同的方式在该类上工作。因此,我不想再重复编码(因为代码维护,更少的错误,代码可读性)。

在C ++中,我可以这样做。看来,我对这个问题的处理方法在MATLAB中是错误的。

1 个答案:

答案 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准备控制台输出是可怕的......