Hola personal
Quería comenzar a usar las clases JMP en las secuencias de comandos, pero encontré un comportamiento desafortunado: al dar argumentos a un método, los argumentos se tratan como si fueran miembros de la clase, lo que hace que las clases sean casi inutilizables ya que el argumento del método depende de si un el miembro de la clase ya usa esa variable. No encontré ninguna forma de forzar el envío de una variable global o aquí: al método. Yo 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.
Atentamente,
Tomás
Y un par de publicaciones usando clases:
Cómo usar Definir clase
Programación funcional usando objetos JSL
Estoy de acuerdo, parece un error.@EvanMcCorkle @Audrey_Shull
Una solución consiste en 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.