Es un patrón que se puede aplicar a cualquier idioma, siempre que el idioma se haya escrito con un entorno que permita reasignar nombres asociados con bloques de código.
En la computadora, el código y los datos existen en la memoria. En los lenguajes de programación, usamos nombres para referirnos a esos "trozos" de memoria.
"nombraría" cierta cantidad de bytes de memoria "a". También sería "ceder" que la memoria el valor del byte correspondiente a 0. Dependiendo del tipo de sistema,
int add(int first, int second) {
return first + second;
}
sería "nombre" algún número de bytes de memoria "añadir". También "asignaría" esa memoria para contener las instrucciones de la máquina para buscar en la pila de llamadas dos números "int", agréguelos y coloque el resultado en el lugar apropiado de la pila de llamadas.
En un sistema de tipo que separa (y mantiene) nombres de bloques de código, el resultado final es que puede pasar fácilmente bloques de código por referencia, de la misma forma que puede tener memoria variable por referencia. La clave es asegurarse de que el sistema de tipos "coincida" solo con los tipos compatibles; de lo contrario, pasar alrededor de los bloques de código podría inducir a errores (como devolver un valor largo cuando se definió originalmente para devolver un int).
En Java, todos los tipos se resuelven en una "firma" que es una representación de cadena del nombre del método y "tipo". Mirando el ejemplo proporcionado complemento, la firma es
// This has a signature of "add(I,I)I"
int add(int first, int second) {
return first + second;
}
Si Java soportado (como se hace Clojure) Asignación de nombre de método, tendría que ampliarse en sus reglas de sistema tipo declarado, y permite asignar el nombre del método.Un ejemplo de falsa asignación método sería lógicamente parecerse
subtract = add;
pero esto requeriría la necesidad de declarar restar, con una (para que coincida con Java) "tipo" inflexible.
public subtract(I,I)I;
Y sin algún tipo de atención, tales declaraciones pueden recorrer fácilmente a las partes ya definidos de la lengua.
Pero para volver a su respuesta, en los idiomas que los admiten, los nombres son básicamente punteros a bloques de código, y pueden reasignarse siempre que no rompa las expectativas de los parámetros de entrada y retorno.
Relevante: https://en.wikipedia.org/wiki/Dynamic_software_updating – user