2016-10-23 11 views
5

अमृत कुछ is_ कार्यों अगर एक आइटम एक विशिष्ट प्रकार है आप जाँच करें कि प्रदान करता है:चेक अगर एक मूल्य के एक कीवर्ड सूची

  • is_atom
  • is_binary
  • is_map
  • आदि

लेकिन मैं कैसे जांचूं कि कोई मूल्य Elixir में एक कीवर्ड सूची है? मैं समझता हूँ कि नीचे, कीवर्ड सूचियां एक परमाणु के रूप में पहला तत्व के साथ 2-तत्व tuples की एक सूची है, इसलिए मेरे वर्तमान वैकल्पिक हल यह है:

defmodule KList do 
    def is_keyword?(list) when is_list(list) do 
    Enum.all? list, fn item -> 
     case item do 
     {k, _} -> is_atom(k) 
     _  -> false 
     end 
    end 
    end 

    def is_keyword?(_), do: false 
end 

वहाँ है एक बेहतर (या एक में निर्मित) ऐसा करने का तरीका? और सबसे महत्वपूर्ण बात यह है कि मैं इसे when खंड में कैसे कर सकता हूं?

+2

आप एक गार्ड खंड में एक कीवर्ड सूची के लिए जाँच करने में सक्षम नहीं होगा। गार्ड में अनुमत अभिव्यक्तियों की एक पूर्वनिर्धारित सूची है। आपको केवल एक ही एक्सटेंशन लिखने की अनुमति है मैक्रोज़ जो उन अनुमत अभिव्यक्तियों तक विस्तारित है। http://elixir-lang.org/docs/master/elixir/guards – mario

उत्तर

7

मैं विश्वास नहीं कर सकता मैं इसे याद किया, लेकिन वहाँ एक Keyword मॉड्यूल keyword?/1 विधि का निर्यात करता है:

Keyword.keyword?(term)

रिटर्न true अगर term एक खोजशब्द सूची है, अन्यथा रिटर्न false

उदाहरण:

iex> Keyword.keyword?([]) 
true 
iex> Keyword.keyword?([a: 1] 
true 
iex> Keyword.keyword?([{Foo, 1}]) 
true 
iex> Keyword.keyword?([{}]) 
false 
iex> Keyword.keyword?([:key]) 
false 
iex> Keyword.keyword?(%{}) 
false 
संबंधित मुद्दे