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