overloading

Personnalisation des opérateurs et fonctions

📄 Description

Dans divers scénarios, vous pouvez avoir besoin de modifier le comportement des opérateurs et fonctions de Nelson lorsqu'ils opèrent sur des objets ou des types de base.

Cette personnalisation peut être réalisée en surchargeant les fonctions concernées, leur permettant de gérer différents types et nombres d'arguments d'entrée et d'exécuter l'opération appropriée pour l'objet de plus haute priorité.

Surcharge des opérateurs :

Chaque opérateur intégré correspond à un nom de fonction spécifique (par exemple, l'opérateur - est associé à la fonction minus.m).

Vous pouvez surcharger n'importe quel opérateur en créant un fichier M avec le nom approprié dans le répertoire de la classe.

Par exemple, si A ou B est un objet de type classname, l'expression A - B déclenche un appel à la fonction @classname/minus.m, si elle existe.

Lorsque A et B appartiennent à des classes différentes, Nelson applique des règles de précédence pour déterminer la méthode à utiliser.

Le tableau ci-dessous fournit la liste des noms de fonctions associés à la plupart des opérateurs Nelson :

| Description | Opérateur | Fonction | | ------------------------------------- | --------------------------- | ------------------ | -------- | | Addition binaire | a + b | plus(a, b) | | Soustraction binaire | a - b | minus(a, b) | | Moins unaire | -a | uminus(a) | | Plus unaire | +a | uplus(a) | | Multiplication élément par élément | a .* b | times(a, b) | | Multiplication matricielle | a * b | mtimes(a, b) | | Division élément par élément à droite | a ./ b | rdivide(a, b) | | Division élément par élément à gauche | a .\ b | ldivide(a, b) | | Division matricielle à droite | a / b | mrdivide(a, b) | | Division matricielle à gauche | a \ b | mldivide(a, b) | | Puissance élément par élément | a .^ b | power(a, b) | | Puissance matricielle | a ^ b | mpower(a, b) | | Inférieur à | a < b | lt(a, b) | | Supérieur à | a > b | gt(a, b) | | Inférieur ou égal | a <= b | le(a, b) | | Supérieur ou égal | a >= b | ge(a, b) | | Différent | a ~= b | ne(a, b) | | Égalité | a == b | eq(a, b) | | ET logique | a & b | and(a, b) | | OU logique | a | b | or(a, b) | | NON logique | ~a | not(a) | | Opérateur deux-points | a:d:b | colon(a, d, b) | | Transposée conjuguée | a' | ctranspose(a) | | Transposée matricielle | a.' | transpose(a) | | Méthode d'affichage | sortie fenêtre de commandes | display(a) | | Concaténation horizontale | [a, b] | horzcat(a, b, ...) | | Concaténation verticale | [a; b] | vertcat(a, b, ...) | | Référence par indice | a(s1, s2, ... , sn) | subsref(a, s) | | Affectation par indice | a(s1, ... , sn) = b | subsasgn(a, s, b) | | Index de sous-script | b(a) | subsindex(a) |

💡 Exemple

Surcharger l'opérateur minus pour double

% save in @double directory, as minus.m
function r = minus(A, B)
  disp('minus was called')
  % to call minus builtin
  r = builtin('minus', A, B)
end

🔗 Voir aussi

plus, minus, uminus, uplus, times, mtimes, rdivide, ldivide, mrdivide, mldivide, power, mpower, lt, gt, le, ge, ne, eq, and, or, not, colon, ctranspose, transpose, display, horzcat, vertcat, subsref, subsasgn, subsindex.

🕔 Historique

Version
📄 Description

1.0.0

version initiale

Last updated

Was this helpful?