2017-10-17 6 views
0

J'ai une classe dans MATLAB qui utilise une méthode de classe pour l'indexation spécialisée dans les données de classe. Je m'intéresse à surcharger la méthode end (obj, k, n) pour qu'il soit facile d'écrire des expressions d'indexation dans cette méthode, mais j'ai déjà surchargé cette fonction pour l'utiliser dans subsref (obj, s).MATLAB OOP: Comment la fonction end est appelée lorsqu'elle est passée à une méthode de classe

Quelqu'un pourrait-il s'il vous plaît me expliquer comment Matlab appelle la méthode finale dans ce qui suit:

>> obj = myClass; obj.myIndexMethod(1:end) 
+3

Est-ce que [la documentation] (https://www.mathworks.com/help/matlab/matlab_oop/object-end-indexing.html) n'est pas suffisante? – excaza

+0

La documentation explique suffisamment ce qui se passe lorsque vous appelez 'obj (1: end)'. Non, cela n'explique pas ce qui se passe lorsque vous passez 'end' dans le cadre d'un argument d'une méthode de classe. – benjamminbrown

+0

Pour clarifier, 'myIndexMethod' est une méthode de ma classe, pas une propriété. – benjamminbrown

Répondre

0

end est mis en œuvre en fonction ind = end(obj, k, n). k est l'index de l'expression contenant end, et n est le nombre total d'indices dans l'expression.

Ainsi, par exemple, lorsque vous appelez a(1,end,1), k est 2, comme end est en argument 2 et 3 est n comme il y a 3 arguments.

ind est renvoyé comme index pouvant remplacer end dans l'expression.

+0

Oui, je comprends déjà comment la fin est supposée fonctionner quand vous l'utilisez dans une expression d'indexation. Ce que je ne comprends pas, c'est comment il est appelé quand vous le passez dans le cadre d'un argument à une fonction. – benjamminbrown

+0

Comme je l'ai dit dans ma question initiale, j'ai déjà surchargé fin de travailler correctement lors de l'indexation dans ma classe. – benjamminbrown

+0

'end' est une méthode destinée à être utilisée dans une expression d'indexation uniquement. Cela n'a pas vraiment de sens d'utiliser dans un autre contexte, comme un argument à une méthode, mais si vous le faites, cela fonctionne quand même de la même façon. Si (au lieu de 'a (1, fin, 1)' comme ci-dessus), vous appelez 'a.myMethod (1, end, 1)', MATLAB passera 'k' comme 2 et' n' comme 3 dans '' méthode end' de 'a'. Si la méthode 'end' est intégrée, elle renverra' ind' comme ci-dessus, et si vous la surchargez, elle retournera tout ce que vous lui dites. –