如何在MATLAB中使用subsref

时间:2016-04-24 17:19:25

标签: matlab

我用16a。我发现重载subsref使任何函数调用对象call()。我不确定这是否正确使用subsref。例如,

classdef A < handle
    methods
        function obj = A(varargin)
        end

        function v = subsref(obj, S) %#ok<STOUT,INUSD>
            assert(false);
        end

        function c = foo(obj) %#ok<MANU>
            c = 1;
        end 
    end 
end

然后,当使用foo时,我认为以下错误。

>> a = A()

a = 

  A with no properties.

>> a.foo()
Error using A/subsref (line 6)
Assertion failed.

8               assert(false);

如果我删除了subsref,它可以正常工作。

方面

http://www.mathworks.com/help/matlab/ref/subsref.html

仅在A {i},A(i)或A.field时调用subsref。由于foo是一种方法,为什么仍然会调用subsref?

1 个答案:

答案 0 :(得分:4)

这是完全预期的行为,因为对于MATLAB,A.fieldA.method 两者都使用点引用,因此由subsref处理。解决这个问题的典型方法是使用标准函数调用而不是点引用方法调用来调用类方法。

method(A)

%// Rather than
A.method()

这种用法也很优越,因为它可以在对象数组上运行,而不仅仅是标量。此外,它是more performant