2016-04-03 29 views
6

यहाँ डॉक्स से एक अस्पष्ट उदाहरण है, इस ऑपरेटर का उपयोग: http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#atवास्तव में क्या करता है: = ऑपरेटर एल्म में करता है?

+0

कृपया बताएं कि आप क्या समझ में नहीं आ रहे हैं या क्या काम नहीं कर रहा है।मैं इस सवाल को बंद करने के लिए मतदान कर रहा हूं * आप जो पूछ रहे हैं उसे अस्पष्ट करें * – Druzion

+1

वाह, सभी उत्तरों के बाद यह सब स्पष्ट है। हर किसी के लिए बहुत धन्यवाद। मैं समझ नहीं पाया कि यह ऑपरेटर जेसन.डेकोड पैकेज के लिए विशिष्ट है, मैंने सोचा कि यह मूल से मूल है। –

उत्तर

10

कृपया ध्यान दें कि (:=)0.18.0

इन्फ़िक्स ऑपरेटरों

एल्म में से शुरू Json.Decode से निकाल दिया जाता है, तो आप कस्टम infix operators परिभाषित कर सकते हैं, उनके अस्तित्व का उद्देश्य कोड का एक अधिक पठनीय संस्करण प्रदान करने के लिए है। विडंबना यह है कि, जब आप अवधारणा से परिचित नहीं होते हैं, तो यह विपरीत होता है।

(:=) एक कस्टम इंफिक्स ऑपरेटर है, जो Json.Decode पैकेज द्वारा प्रदान किया गया है।

एक कस्टम इन्फ़िक्स ऑपरेटर के निम्न उदाहरण पर विचार करें:

import Html exposing (text) 

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

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

यह अत्यधिक कस्टम इन्फ़िक्स ऑपरेटरों के उपयोग से बचने के लिए सिफारिश की है।

चलिए (:=) ऑपरेटर पर वापस आएं।

प्रकार परिभाषा के लिए यह (:=) : String -> Decoder a -> Decoder a, जिसका अर्थ है, हम उपलब्ध Decoder Primitives की सूची से, एक स्ट्रिंग और एक डिकोडर पारित करने के लिए है कि और एक नया विकोडक reruns, यह करने के लिए मैप किया गया एक स्ट्रिंग कुंजी के साथ की तरह दिखता है।

मूल कोड

जावास्क्रिप्ट दुनिया में, डिकोडर्स कॉलबैक कार्यों उस प्रकार की जाँच कर रहे हैं।

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

यहाँ और (:=) ऑपरेटर की एक जावास्क्रिप्ट बराबर है::

उदाहरण के लिए, यहाँ एक डिकोडर स्ट्रिंग आदिम है

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

टी एल; डॉ

(:=) नक्शे के लिए एक स्ट्रिंग कुंजी एक कॉलबैक (यह वास्तव में एक कॉलबैक नहीं है, लेकिन यह सबसे नज़दीक है जिसके बारे में आप सोच सकते हैं), जो जावास्क्रिप्ट ऑब्जेक्ट में मान के प्रकार की जांच करेगा, जब आप con इसे एल्म वैल्यू में वर्ट करें।

3

यह शब्दकोश आप पर काम कर रहे हैं के लिए एक महत्वपूर्ण लेता है और क्या एक विकोडक, के साथ वहाँ पाया डिकोड करने के लिए प्रयास करता है इस तरह के लोगों में बनाया के किसी भी रूप में या यहां तक ​​कि अपने स्वयं के कस्टम एक।

यह अनिवार्य रूप से एक ही पहुंच at है।

"name" := string 
5

यह एक json स्ट्रिंग में किसी कुंजी के लिए एक विकोडक बनाता है: करने के लिए

at ["name"] string 

बराबर है।

"name" := string 

एक विकोडक कि "नाम" में मूल्य निकालता है और string डिकोडर को पास कर बनाता है।

संबंधित मुद्दे