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?
Odpowiedz
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.
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
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
.
Proszę wyjaśnić, czego nie rozumiesz lub co nie działa.Głosuję, aby zamknąć to pytanie jako * Niejasne, o co prosisz * – Druzion
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. –