Hola personal
Quería comenzar a usar clases JMP en secuencias de comandos, pero encontré un comportamiento desafortunado: cuando se dan argumentos a un método, los argumentos se tratan como si fueran miembros de una clase, lo que hace que las clases sean casi inutilizables ya que el argumento del método depende de si un miembro de la clase ya usa esa variable. No encontré ninguna forma de forzar el envío de una variable global o here: al método. Creo que es un error. El siguiente código reproduce este comportamiento:
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);
En lo anterior, debido a que varA es tanto una variable global como una variable de método, "aMethod" solo obtiene 3 y no 4 en el argumento. Entonces, el comportamiento está influenciado por la interacción entre los nombres de los miembros de la clase interna y los nombres de las variables globales.
Saludos cordiales,
Thomas
Estoy de acuerdo, parece un error. @EvanMcCorkle @audrey_shull
Una solución es prefijar los nombres de las variables miembro con m_. He usado ese prefijo, o una variación, durante mucho tiempo para ayudar a cualquiera que lea el código a comprender cuándo está mirando una variable miembro.
Y un par de publicaciones usando clases:
Cómo utilizar Definir clase
Programación funcional usando objetos JSL