现在,据我所知,调用obj.method
或method(obj)
似乎给出了相同的结果。然而,当我试图了解subsref
这些情况下的行为方式时,我method(obj)
突然意识到似乎并没有通过 subsref 机制。那么这些调用是如何处理的,是否有一种实用的方法来覆盖它们呢?
我正在尝试这样做,所以我可以使类似的事情成为method(object).otherMethod
可能(我显然会通过 custom 来处理subsref
)。有任何想法吗?
现在,据我所知,调用obj.method
或method(obj)
似乎给出了相同的结果。然而,当我试图了解subsref
这些情况下的行为方式时,我method(obj)
突然意识到似乎并没有通过 subsref 机制。那么这些调用是如何处理的,是否有一种实用的方法来覆盖它们呢?
我正在尝试这样做,所以我可以使类似的事情成为method(object).otherMethod
可能(我显然会通过 custom 来处理subsref
)。有任何想法吗?
method(obj)
实际上只是调用函数method
on obj
。obj.method
通过subsref
,然后将其分配给相同的功能,除非您已经实现了自己的 custom subsref
。我不确定你所说的“覆盖”是什么意思method(obj)
——你不能让 MATLAB 调度过程以不同的方式工作。
而不是method(obj).otherMethod
,您通常会这样做tmp = method(obj); tmp.otherMethod
。
如果您尝试完全重新实现subsref
到处理任意深度嵌套和复杂表达式的程度 - 例如可能采用的形式obj.property{1}.structfield(2).method.otherMethod
- 事情会变得非常复杂非常快。我通常会尝试只处理较小深度的嵌套,然后将任何更深的嵌套传递给builtin('subsref')
.