La questione è stata risolta, ma penso che un po 'di grassetto e barratura rendono molto facile per vedere le conversioni di codice. Speriamo che questa risposta aiuti chiunque stia cercando di visualizzare il problema.
Non si scrive & hellip;
var floor = function(x) { return Math.floor(x) }
Invece, si scriverebbe & hellip;
var floor = Math.floor
& hellip; e funzionerà esattamente lo stesso †. Questo è chiamato Eta Conversion e se lo ripeti due volte, vedrai come Brian ha ottenuto il suo risultato nella Guida perlopiù adeguata.
La regola di base della conversione Eta è questo:
function(x) { return f(x) } === f
& hellip; sono completamente intercambiabili †
È possibile utilizzare la stessa tecnica nel codice originale
var getServerStuff = function(callback) {
return ajaxCall(function(json) {
return callback(json)
})
}
Primo sguardo al & hellip;
return ajaxCall(function(json) { return callback(json) })
Eta conversione dice & hellip;
function(json) { return callback(json) } === callback
Quindi diamo un'occhiata all'intero codice con i risultati della prima conversione eta & hellip;
// first step
var getServerStuff = function(callback) {
return ajaxCall(function(json) {
returncallback(json)
})
}
// eta converts to ...
var getServerStuff = function(callback) {
return ajaxCall(callback)
}
Questo scenario dovrebbe esserci familiare. Un'altra conversione eta ci porterà alla forma semplificata finale.Aggiungerò in grassetto ancora una volta in modo che possiamo vederlo meglio
Eta conversione dice & hellip;
function(callback) { return ajaxCall(callback) } === ajaxCall
// second step
var getServerStuff = function(callback) {
returnajaxCall(callback)
}
// eta converts to ...
var getServerStuff = ajaxCall
† per tutti gli effetti, sono intercambiabili. La Guida alla FP perlopiù adeguata mostra scarsa attenzione per l'associazione o l'uso dinamico di this
'ajaxCall' prende un singolo argomento chiamabile che a sua volta prende un singolo argomento, il' json'. Se tutto ciò che il callback fa è chiamare un'altra funzione con gli stessi argomenti, * può essere sostituita da quella funzione *. – jonrsharpe
È simile, sebbene non esattamente equivalente, a ciò che viene chiamato * inlining * in lingue più imperative. –
@jonrsharpe perché è così? perché può essere sostituito? C'è un nome per questo ? –