我有这个功能
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
答案 0 :(得分:15)
您可以改为使用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/2
在 opts
中传递并带有一些默认值:
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
希望它有所帮助!
答案 1 :(得分: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"