Salut le personnel
Je voulais commencer à utiliser les classes JMP dans les scripts, mais j'ai rencontré un comportement malheureux : lorsque vous donnez des arguments à une méthode, les arguments sont traités comme s'ils étaient des membres de classe, ce qui rend les classes presque inutilisables car l'argument de la méthode dépend si un le membre de la classe utilise déjà cette variable. Je n'ai trouvé aucun moyen de forcer l'envoi d'une variable globale ou ici: à la méthode. Je crois que c'est un bug. Le code suivant reproduit ce comportement :
define class ("aClass",
varA = .;
aMethod=method({someVar},
varA = someVar;
show(someVar);
)
);
obj=new object(aClass());
varB=3;
obj:aMethod(varB);
varA=4;
obj:aMethod(varA);
obj:aMethod(::varA);
Dans ce qui précède, parce que varA est à la fois une variable globale et une variable metod, "aMethod" obtient juste 3 et non 4 dans l'argument. Ainsi, le comportement est influencé par l'interaction entre les noms de membres de classe internes et les noms de variables globales.
Bien à vous,
Thomas
Et quelques articles utilisant des classes :
Comment utiliser Définir une classe
Programmation fonctionnelle à l'aide d'objets JSL
Je suis d'accord, ça ressemble à un bug.@EvanMcCorkle @Audrey_Shul
Une solution de contournement consiste à préfixer les noms des variables membres avec m_ . J'utilise ce préfixe, ou une variante, depuis longtemps pour aider quiconque lit le code à comprendre quand il regarde une variable membre.