Dominant arguments and gpuArray
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Matt J
le 7 Sep 2018
Réponse apportée : Jennifer Black
le 10 Sep 2018
"The dominant argument in a method's argument list determines which version of the method or function that the MATLAB runtime calls. Dominance is determined by the relative precedences of the classes of the arguments. In general, user-defined classes take precedence over built-in MATLAB classes"
However, I'm finding that gpuArrays take precedence over user-defined classes in the example below
classdef myclass
methods
function mldivide(x,y)
disp ' '
disp 'myclass mldivide method called'
disp ' '
end
end
end
>> which mldivide( gpuArray(1) , myclass)
mldivide is a built-in method % gpuArray method
Why does gpuArray, which is a built-in class, take precedence over my user-supplied class, contrary to the documentation?
0 commentaires
Réponse acceptée
Jennifer Black
le 10 Sep 2018
MATLAB uses dominant argument dispatching to determine which version of a method to call. During method dispatching, MATLAB determines the dominant class from among the arguments in the call. In general, all MATLAB classes defined using the classdef syntax have equal precedence for purposes of method dispatching. It does not matter whether the class is authored by MathWorks or is a third-party class. The InferiorClasses class attribute does allow for some customization of this behavior, but in most cases, when a method is invoked and two or more objects are part of the argument list, the method defined for the class of the left-most object is invoked. That is why the which function is telling you that the mldivide method of gpuArray is invoked when called as mldivide(gpuArray(1), myclass).
If you use dot-based method invocation, then only the argument to the left of the dot is used for dispatching.
The section of the documentation cited above is using the phrase "built-in MATLAB classes" to refer to MATLAB's fundamental types. This includes double, single, signed and unsigned int8, int16, int32, and int64, logical, char, string, cell, struct, and function_handle. MATLAB classes defined using a classdef do take precedence over those fundamental types. We are reviewing that section of the documentation to make it clearer.
0 commentaires
Plus de réponses (1)
Alexander Jensen
le 7 Sep 2018
Modifié(e) : Alexander Jensen
le 7 Sep 2018
I believe that what ever computation run within the class will choose the function you've defined in your class, however, calling the function outside of your class requires you to write:
myclass.mldivide(x,y)
Also:
which myclass.mldivide
However I might be wrong :)
0 commentaires
Voir également
Catégories
En savoir plus sur Construct and Work with Object Arrays dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!