Un collega e io stiamo facendo un corso R gratuito, anche se credo che questo sia un problema di valutazione pigro più generale, e abbiamo trovato uno scenario che abbiamo discusso brevemente e mi piacerebbe trovare la risposta di una comunità più ampia .
Lo scenario è il seguente (pseudo codice):
wrapper => function(thing)
{
print => function()
{
write(thing)
}
}
v = createThing(1, 2, 3)
w = wrapper(v)
v = createThing(4, 5, 6)
w.print()
// Will print 4, 5, 6 thing.
v = create(7, 8, 9)
w.print()
// Stampa 4, 5, 6 perché "cosa" è stata ora valutata.
Un'altra situazione simile è la seguente:
// Using the same function as above
v = createThing(1, 2, 3)
v = wrapper(v)
w.print()
// The wrapper function incestuously includes itself.
Ora capisco perché questo accade ma dove io e il mio collega differiamo è su cosa dovrebbe accadere.
La vista del mio collega è che questo è un bug e la valutazione dell'argomento passato deve essere forzata nel momento in cui viene passata in modo che la funzione "w" restituita sia corretta.
Il mio punto di vista è che preferirei la sua opzione da solo, ma mi rendo conto che la situazione che stiamo incontrando dipende dalla valutazione pigra e questo è esattamente come funziona ed è più una stranezza che un bug. Non sono sicuro di cosa ci si aspetterebbe, quindi la ragione per cui sto facendo questa domanda. Penso che i commenti alle funzioni possano esprimere quello che accadrà, o lasciare che sia molto pigro, e se il codificatore che usa la funzione vuole che l'argomento sia valutato, allora possono forzarlo prima di passarlo.
Quindi, quando si lavora con evaulation pigro, qual è la pratica per il tempo di valutare un argomento passato e memorizzato, all'interno di una funzione?