2016-04-05 4 views
6

मैं इस समारोहडिफ़ॉल्ट और वैकल्पिक तर्क कैसे हैं?

def start(data, opts \\ [pages: 17, depth: 3]) do 
     maxPages = opts[:pages] 
     maxDepth = opts[:depth] 
     IO.puts maxPages 
     IO.puts maxDepth 
    end 

जब मैं Program.start("data", pages: 8) तो मैं इसे 8 और 3 प्रिंट करना चाहते है, लेकिन यह केवल प्रिंट 8

उत्तर

12

इसके बजाय आप Keyword#get/3 साथ जा सकते हैं, जैसे:

def start(data, opts \\ []) do 
    maxPages = Keyword.get(opts, :pages, 17) 
    maxDepth = Keyword.get(opts, :depth, 3) 
    IO.puts maxPages 
    IO.puts maxDepth 
end 

या वैकल्पिक रूप से, Keyword#merge/2opts कुछ def के साथ अल्ट्स:

def start(data, opts \\ []) do 
    finalOpts = Keyword.merge([pages: 17, depth: 3], opts) 
    maxPages = finalOpts[:pages] 
    maxDepth = finalOpts[:depth] 
    IO.puts maxPages 
    IO.puts maxDepth 
end 

आशा है कि इससे मदद मिलती है!

0

कीवर्ड सूची के बजाय नक्शा के साथ मेरी राय में अधिक कॉम्पैक्ट/अच्छे है:

defmodule U2 do 
    def format(value, opts \\ %{}) do 
    opts = %{unit: "kg", decimals: 2} |> Map.merge(opts) 
    "#{Float.to_string(value, [decimals: opts.decimals])} #{opts.unit}" 
    end 
end 
IO.inspect U2.format 3.1415       # "3.14 kg" 
IO.inspect U2.format 3.1415, %{decimals: 3}   # "3.142 kg" 
IO.inspect U2.format 3.1415, %{decimals: 3, unit: "m"} # "3.142 m" 
IO.inspect U2.format 3.1415, %{unit: "Pa"}    # "3.14 Pa" 
संबंधित मुद्दे