bu operatörü kullanarak, dokümanlardan bir belirsiz örnektir: http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#atTam olarak nedir: = operatör Elm'de ne yapıyor?
Böyle olanlar yerleşik herhangi olarak ameliyat ediyoruz sözlük için bir anahtar alır ve bir dekoderi, orada bulunanlarla ilgili çözmeye çalışırcevap
o (:=)0.18.0
telkin operatörleri
Elm isebaşlayarak Json.Decode kaldırılır değil Lütfen, özel infix operators tanımlayabilirsiniz, onların varlığını amacı kod daha okunabilir sürümünü sunmaya yöneliktir. İronik olarak, kavramla aşina olmadığınız zaman, bunun tersi olur.
(:=), Json.Decode paketi tarafından sağlanan özel bir infix operatördür.
özel infix operatörün şu örneği düşünün:import Html exposing (text)
(<|>) : String -> String -> String
(<|>) beginning end =
beginning ++ "Bar" ++ end
main =
text ("Foo" <|> "Buz") -- "FooBarBuz"
Oldukça özel infix operatörlerin kullanımını önlemek için tavsiye edilir.
(:=) operatörüne geri dönelim.
biz mevcut Decoder Primitives listesinden, bir String ve Decoder geçmek zorunda olduğu anlamına gelir ve buna eşlenmiş bir dize anahtarla, yeni bir dekoder yeniden çalıştırır (:=) : String -> Decoder a -> Decoder a
, benziyor tip tanımı.
JavaScript dünyasında
yerel kod, kod çözücüler tür denetlemesi yapmak geri arama fonksiyonları bulunmaktadır.
Örneğin, burada İlkel bir Dekoder Dize geçerli:
function decodeString(value) {
if (typeof value === 'string' || value instanceof String) {
return value;
}
crash('a String', value);
}
Ve burada bir JavaScript (:=) operatörün eşdeğer:
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
(:=) bir dize anahtarını eşler Bir geri arama (tam olarak bir geri arama değil, aklınıza gelebilecek en yakın olan), JavaScript nesnesindeki değerin türünü kontrol ettiğinizde Elm değerine çevir.
veya hatta kendi özel olanı.
Temelde tek bir erişim at
.
"name" := string
Bir json dizesinde verilen anahtar için bir kod çözücüyü oluşturur: için
at ["name"] string
eşit mi.
"name" := string
"isim" değeri çıkartır ve
string
kod çözücüye geçirir bir kod çözücü oluşturur.
Lütfen neyi anlamadığınızı veya nelerin çalışmadığını açıklayınız.Bu soruyu kapatmak için oy veriyorum * Ne sorduğunuzu net değil * – Druzion
Vay, tüm cevaplardan sonra Her şey açık. Herkese çok teşekkürler. Bu operatörün Json.Decode paketi için spesifik olduğunu anlayamadım, çekirdekten kökenini düşündüm. –