我用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?
答案 0 :(得分:4)
这是完全预期的行为,因为对于MATLAB,A.field
和A.method
两者都使用点引用,因此由subsref
处理。解决这个问题的典型方法是使用标准函数调用而不是点引用方法调用来调用类方法。
method(A)
%// Rather than
A.method()
这种用法也很优越,因为它可以在对象数组上运行,而不仅仅是标量。此外,它是more performant。