2016-04-03 31 views
6

Ecco un esempio chiaro da documenti, utilizzando questo operatore: http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#atChe cosa fa esattamente l'operatore: = in Elm?

+0

Spiegare cosa non si capisce o cosa non funziona.Sto votando per chiudere questa domanda come * Non chiaro cosa stai chiedendo * – Druzion

+1

Wow, dopo tutte le risposte È tutto chiaro. Mille grazie a tutti. Non riuscivo a capire che questo operatore è specifico per il pacchetto Json.Decode, ho pensato all'origine dal core. –

risposta

10

prega di non che (:=) viene rimosso dal Json.Decode a partire dal 0.18.0

operatori infissi

A Elm, è possibile definire personalizzato infix operators, lo scopo della loro esistenza è di fornire una versione più leggibile del codice. Ironia della sorte, quando non hai familiarità con il concetto, fa il contrario.

(:=) è un operatore infisso personalizzato, fornito dal pacchetto Json.Decode.

perche il seguente esempio di un operatore infisso personalizzato:

import Html exposing (text) 

(<|>) : String -> String -> String 
(<|>) beginning end = 
    beginning ++ "Bar" ++ end 

main = 
    text ("Foo" <|> "Buz") -- "FooBarBuz" 

Si consiglia vivamente di evitare l'utilizzo di operatori infissi su misura.

Torniamo all'operatore (:=).

La definizione del tipo di assomiglia (:=) : String -> Decoder a -> Decoder a, il che significa che dobbiamo passare una stringa e un decodificatore, dall'elenco dei disponibili Decoder Primitives e repliche un nuovo decoder, con una chiave stringa mappata ad esso.

codice nativo

Nel mondo JavaScript, decodificatori sono le funzioni di callback che fanno controllo dei tipi.

Per esempio, ecco uno String Decoder primitiva:

function decodeString(value) { 
    if (typeof value === 'string' || value instanceof String) { 
    return value; 
    } 
    crash('a String', value); 
} 

Ed ecco un equivalente JavaScript del (:=) dell'operatore:

function decodeField(field, decoder) { 
    return function(value) { 
    var subValue = value[field]; 
    if (subValue !== undefined) { 
     return decoder(subValue); 
    } 
    crash("an object with field '" + field + "'", value); 
    }; 
} 

TL; DR

(:=) mappe una chiave stringa un callback (non è esattamente un callback, ma è il più vicino a cui si possa pensare), che controllerà il tipo di valore nell'oggetto JavaScript, quando si Vertalo nel valore di Elm.

3

Ci vuole una chiave per il dizionario si opera su e tenta di decodificare ciò che ha trovato lì con un decoder, come ad esempio una delle costruito in quelle o anche il tuo personalizzato.

È essenzialmente un accesso singolo at.

at ["name"] string 

è pari a:

"name" := string 
5

crea un decoder per la chiave data in una stringa JSON.

"name" := string 

Crea un decodificatore che estrae il valore "Nome" e lo passa al decodificatore string.