La differenza tra bind e _.curry

1

Quindi il bind di JavaScript supporta il curriculum, ma la maggior parte delle persone usa qualche altra libreria come lodash o ramda per fare il curriculum.

Dalla prima impressione Sembra che bind supporti il cambio di contesto, poiché si tratta del ruolo previsto, ad es.

var replaceTest = replace.bind(this, 'test')

replaceTest('beta', environments)

Gli altri metodi di curry non hanno questo.

var replace = _.curry(function (a, b, list) {
  // implementation
})
var replaceTest = replace('test')

replaceTest('beta', environments)

Quindi ci sono altre differenze tra i due metodi? Principalmente voglio sapere se ha senso usare una di queste implementazioni quando c'è un presente di implementazione nativo.

    
posta knownasilya 20.07.2015 - 20:04
fonte

1 risposta

3

bind() in realtà non sta funzionando. Quello che fa è applicazione parziale . lodash e rambda hanno un metodo chiamato _.partial() che fa l'applicazione parziale senza impostare l'oggetto contesto.

Una funzione f viene curried se chiamare f con uno o più argomenti equivale a chiamare f con un argomento, quindi chiamare il valore di ritorno con l'argomento successivo, e così via fino a quando non si esauriscono gli argomenti. Il currying può essere implementato con un'applicazione parziale, ma è una cosa diversa.

Se vuoi davvero una funzione al curry, probabilmente è meglio usare una di queste librerie invece di usare la tua. Se tutto ciò che vuoi è un'applicazione parziale, bind() dovrebbe essere abbastanza buono, ma se stai già usando una libreria come lodash o rambda, prenderei in considerazione _.partial() . Inoltre, vale la pena notare che il curring non funziona molto bene con le funzioni variadiche.

P.S. Questo post del blog offre un lavoro molto migliore che lo spiega .

    
risposta data 20.07.2015 - 20:34
fonte

Leggi altre domande sui tag