Da Erlang documentation:
Un divertente creato da fun M:F/A
è chiamato un divertente esterna. La chiamata chiamerà sempre la funzione F
con l'asterisco A
nell'ultimo codice per il modulo M
. Si noti che il modulo M
non ha nemmeno bisogno di essere caricato quando viene creato il divertente fun M:F/A
.
Tutti gli altri giochi si chiamano divertimento locale. Quando viene chiamato un divertimento locale, viene chiamata la stessa versione del codice che ha creato il divertimento (anche se è stata caricata una versione più recente del modulo).
hanno comportamenti diversi nel codice riqualificazione come la documentazione dice. Il primo modulo utilizza una funzione locale (fun f/0
) e il secondo utilizza una funzione esterna (fun ?MODULE:f/0
che in pre-elaborazione è stata sostituita con fun some_mod:f/0
).
Quindi, se si aggiorna il primo modulo (che utilizza la funzione locale), i processi che utilizzano la funzione some_fun
, non utilizzano la versione più recente. Ma se si aggiorna il secondo modulo (che utilizza la funzione esterna), verrà chiamata l'ultima versione del codice ogni volta che some_fun
viene chiamato da processi interni che sono stati generati anche prima del caricamento della nuova versione.
Avviso: Non ci può essere solo due versioni di un modulo, vecchia e nuova. Se viene caricata una terza versione del modulo, il code server rimuove (elimina) il vecchio codice e tutti i processi che si fermano in esso sono terminati.
fonte
2016-01-12 10:09:37
Infatti, se viene caricata una terza versione del modulo, viene interrotto qualsiasi processo che trattiene un riferimento a un divertimento nel vecchio codice (nel caso 'fun f/0'). – legoscia