2016-04-03 23 views
6

Oto niejasne przykład z docs, za pomocą tego operatora: http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#atCo dokładnie robi operator: = w Wiąz?

+0

Proszę wyjaśnić, czego nie rozumiesz lub co nie działa.Głosuję, aby zamknąć to pytanie jako * Niejasne, o co prosisz * – Druzion

+1

Wow, po wszystkich odpowiedziach Wszystko jest jasne. Wielkie dzięki dla wszystkich. Nie mogłem zrozumieć, że ten operator jest specyficzny dla pakietu Json.Decode, myślałem, że pochodzi on z rdzenia. –

Odpowiedz

10

Proszę nie że (:=) jest usuwany z Json.Decode począwszy od 0.18.0

operatorów Infix

W Elm, można określić niestandardową infix operators, celem ich istnienia jest zapewnienie bardziej czytelnej wersji kodu. Jak na ironię, kiedy nie znasz tej koncepcji, robi się odwrotnie.

(:=) to niestandardowy operator infiksów, dostarczany przez pakiet Json.Decode.

Proszę rozważyć następujący przykład operatora zwyczaj Infix:

import Html exposing (text) 

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

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

Jest wysoce zalecane, aby uniknąć wykorzystania operatorów infiksowych zwyczaj.

Wróćmy do operatora (:=).

Definicja typu wygląda na (:=) : String -> Decoder a -> Decoder a, co oznacza, że ​​musimy przekazać ciąg i dekoder z listy dostępnych Decoder Primitives i ponownie generuje nowy dekoder, z przypisanym do niego kluczem.

natywnego kodu

W świecie JavaScript, Dekodery są oddzwonienia funkcje, które należy wpisywać sprawdzanie.

Na przykład o to String Decoder Primitive:

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

I tu jest równoważne JavaScript z (:=) operatora:

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

(:=) mapuje string key do wywołanie zwrotne (nie jest to dokładnie oddzwanianie, ale jest to najbliższe, jakie można sobie wyobrazić), które sprawdzi typ wartości w obiekcie JavaScript, kiedy ustaw go na wartość Wiązu.

3

Potrzeba klucz do słownika jesteś działających na i próbuje rozszyfrować co się tam znaleźć w dekoder, taki jak każdy z wbudowanego w te lub nawet własnego niestandardowego.

Jest to zasadniczo pojedynczy dostęp at.

at ["name"] string 

wynosi:

"name" := string 
5

Tworzy dekoder dla danego klucza w ciąg JSON.

"name" := string 

Tworzy dekodera, który wyodrębnia się w wartości „nazwy” i przekazuje je do dekodera string.