2015-05-15 10 views
13

का उपयोग करके मानचित्र के बाकी हिस्सों को कैप्चर करना, मैं एक मानचित्र में एक विशिष्ट कुंजी पर एक साथ मिलान करना चाहता हूं, और उस मानचित्र के बाकी हिस्सों को कैप्चर करें। मुझे उम्मीद थी कुछ इस तरह काम करेगा:इलीक्सिर: पैटर्न मिलान

iex(10)> %{"nodeType" => type | rest} = %{"nodeType" => "conditional", "foo" => "bar"} 

** (CompileError) iex:10: cannot invoke remote function IEx.Helpers.|/2 inside match 

लक्ष्य कार्य करता है जो एक नक्शा, नक्शे के क्षेत्रों में से एक पर पैटर्न मैच लेने का एक सेट लिखते हैं, और नक्शे के बाकी के बारे में कुछ परिवर्तनों को करने के लिए है।

def handle_condition(%{"nodeType" => "condition" | rest}) do 
    # do something with rest 
done 
def handle_expression(%{"nodeType" => "expression" | rest}) do 
    # do something with rest 
done 

लेकिन ऐसा लगता है कि मुझे नोड टाइप टाइप करने के लिए कैली की आवश्यकता होगी जब तक कि मुझे कुछ याद न हो।

+0

मैं इस वाक्य रचना चाहते हैं। मैं बस एक ही सवाल पूछने वाला था और वास्तव में उसी वाक्यविन्यास का अनुमान लगाया था 'def update_document (% {id: id, संशोधन: संशोधन | आराम}) # couchdb सामग्री यहाँ अंत' –

+0

सामान्य नोट, फ़ील्ड ' नोड टाइप टाइप 'इंगित करता है कि आप केवल एक मानचित्र के विपरीत' संरचना 'का उपयोग करके बेहतर सेवा कर सकते हैं। देखें http://elixir-lang.github.io/getting-started/structs.html अपना सटीक उपयोग केस जानने के बिना, मैं निश्चित रूप से राज्य नहीं कर सकता, लेकिन चित्रित उपयोग एक कोड गंध है जो आप सबसे अच्छे उपकरण का उपयोग नहीं कर रहे हैं उपलब्ध। –

उत्तर

11

आप आसानी से पूरे मानचित्र पर कब्जा कर सकते हैं - शायद यह पर्याप्त होगा?

def handle_condition(all = %{"nodeType" => "condition"}) do 
    # do something with all 
end 

या:

def handle_condition(all = %{"nodeType" => "condition"}) do 
    all = Map.delete(all, "nodeType") 
    # do something with all 
end 
0

इस को प्राप्त करने का एक और अच्छा तरीका Map.pop/2 का उपयोग करना है:

def handle(%{} = map), do: handle(Map.pop(map, "nodeType")) 

def handle({"condition", rest}) do 
    # ... handle conditions here 
end 

def handle({"expression", rest}) do 
    # ... handle expressions here 
end 
संबंधित मुद्दे