Re: Mejorar el conocimiento del contexto del compilador JMP: el estado cambió a: ReconocidoGracias por el aporte. Queremos que el usuario sepa cuándo está potencialmente sobrescribiendo una función central de JMP. Puedo ver cómo esto podría ser molesto para un usuario más experto. Compartiremos esto con nuestro equipo de desarrollo y veremos si podemos proporcionar una forma de suprimir mensajes de advertencia como este. El desafío será cómo determinar qué mensajes de advertencia deberían o podrían suprimirse.
Supongo que si estuviera definiendo funciones como esta una y otra vez, podría causar que el registro se llene. ¿Con qué frecuencia ve que esto sucede en sus scripts y los archivos de registro asociados? Además, definir la función de manera diferente evitaría este tipo de mensaje en el registro, por ejemplo
"test namespace":customprint=Function({}, "will this print?");
Re: Mejorar el conocimiento del contexto del compilador JMP: el estado cambió a: InvestigandoRe: Mejorar el conocimiento del contexto del compilador JMPGracias por su respuesta, no es una gran molestia, es cuando AddinLoad se ejecuta y mis clases se inicializan. Cambié los generadores de instancias para usar el siguiente método para evitar que coloque estos mensajes en el registro para cada nueva instancia.
Entonces, si es algo que puede hacer fácilmente de su parte, sería bastante bueno, pero de ninguna manera es una alta prioridad.
new namespace( "test",
{
print = Function( {},
show( "test" )
)
}
);
"test":print;Re: Mejorar el conocimiento del contexto del compilador JMPCreo que esta es una mejor solución:
x=New Namespace( "This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!" );
x["print"] = Function( {},
Print( "hello 1" )
);
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print(); // hello 1
// or
y=namespace("This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!");
y["print"] = Function( {},
Print( "hello 2" )
);
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print(); // hello 2
// or
namespace("This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!")["print"] = Function( {},
Print( "hello 3" )
);
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print(); // hello 3
x:print(); // hello 3
y:print(); // hello 3
// the above is to work around the log message from variations on this:
x:print = Function( {},
Print( "hello 4" )
);
/*
The user-defined function "Print" conflicts with the JMP function "Print".
Use a scoped reference (for example, Global:Print or Here:Print) to call
your user-defined function. Other uses of "Print" in your script source
will continue to call the JMP function.
*/
// which actually works...
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print(); // hello 4
// logcapture() is a less pretty way to make the message go away.
// The associative array style assignment prevents JMP from looking up the "print"
// name in the usual way.
// shownamespaces(); // there is only one; x and y are alternate ways to use it
No me gusta agregar declaraciones de asignación (que no sean constantes simples) en la lista de argumentos de NewNameSpace porque se mantienen como expresiones que aún deben evaluarse. Entonces, en su ejemplo, print es una expresión que contiene la definición de la función y se vuelve a evaluar en la función real en cada uso, antes de que se pueda ejecutar la función real. Él hace logre su objetivo porque nunca crea una variable llamada print que contiene una función... solo una expresión que se evalúa como una función.
z = New Namespace(
"z",
f = If( Is Missing( Beep() ), // this is evaluated later, on each access
1,
2
)
);
z:f; // beep!
Estoy de acuerdo, el mensaje actual no debería suceder para este caso; Espero que se arregle.
Mejorar el conocimiento del contexto del compilador JMP¿Qué inspiró esta solicitud de lista de deseos?Los mensajes enviados al registro pueden ser lentos y también confusos para los usuarios.
¿Cuál es la mejora que le gustaría ver?No llenes el registro con mensajes inútiles
¿Por qué es importante esta idea?En realidad, es más bien una molestia.
Considere el siguiente JSL: estoy adjuntando una función al nombre "imprimir" dentro de un espacio de nombres personalizado.
New Namespace( "This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!" );
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print = Function( {},
Print( "Why does JMP think I am trying to overwrite a Builtin???" )
)

¿Por qué recibo esta advertencia?No estoy intentando sobrescribir un archivo incorporado.Sé que estoy poniendo el nombre dentro de un espacio de nombres y esa es la forma en que accederé al valor que contiene ese nombre.
¿Puede el compilador JMP saber cuándo el nombre está dentro de un espacio de nombres y no enviar estos mensajes al registro?Utilizo espacios de nombres para crear clases personalizadas, por lo que cada vez que se crea una nueva instancia, enviará spam al registro con estos mensajes superfluos.
Automatización y secuencias de comandosRe: Mejorar el conocimiento del contexto del compilador JMP: el estado cambió a: reconocido