0

现在,据我所知,调用obj.methodmethod(obj)似乎给出了相同的结果。然而,当我试图了解subsref这些情况下的行为方式时,我method(obj)突然意识到似乎并没有通过 subsref 机制。那么这些调用是如何处理的,是否有一种实用的方法来覆盖它们呢?

我正在尝试这样做,所以我可以使类似的事情成为method(object).otherMethod可能(我显然会通过 custom 来处理subsref)。有任何想法吗?

4

1 回答 1

1

method(obj)实际上只是调用函数methodon objobj.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').

于 2013-03-05T13:25:34.410 回答