2016-04-03 27 views
6
İşte

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ışır
+0

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

+1

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. –

cevap

10

o (:=)0.18.0

telkin operatörleri

Elm ise

baş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.

3

veya hatta kendi özel olanı.

Temelde tek bir erişim at.

"name" := string 
5

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.