How are method(obj) calls handled in MATLAB?
1 view (last 30 days)
Show older comments
Now, as far as I can tell, calling obj.method or method(obj) seems to give the same results. However, when I tried to see how subsref behaves in these cases, I came to the startling realization that method(obj) doesn't seem to go through the subsref mechanism. So how are these calls then handled and is there a practical way to override them?
I'm trying to do this, so I can make something like method(object).otherMethod possible (which I would obviously be handling through a custom subsref). Any ideas?
0 Comments
Answers (2)
Sean de Wolski
on 5 Mar 2013
I would guess that it uses the metaclass function or ? equivalent.
obj = MyClass;
mc = metaclass(obj);
mc.MethodList
Equivalent to:
mc = ?MyClass;
mc.MethodList;
3 Comments
Sean de Wolski
on 6 Mar 2013
I completely misunderstood what you were asking. I thought you were asking how:
methods(obj)
worked. There is a thread somewhere on the difference between obj.foo and foo(obj). I'll see if I can find it.
Walter Roberson
on 6 Mar 2013
There was a recent thread that indicated that obj.method bypassed some checks that method(obj) would otherwise use.
Matt J
on 6 Mar 2013
method(obj) is handled like any other function call. To enable the kind of syntax you're looking for, you could do something very similar to this
but I doubt it's worth it.
Incidentally, obj.method does not (always) go through subsref either. Even if your class defines a subsref method, when you invoke obj.method from within the classdef, subsref is not called. Inside the classdef, obj.method is entirely equivalent to method(obj).
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!