如何拥有默认和可选参数?

Mik*_*keC 6 elixir

我有这个功能

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

当我这样做时,Program.start("data", pages: 8)我希望它打印8,3但它只打印8

Paw*_*zak 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
Run Code Online (Sandbox Code Playgroud)

或可替换地,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
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!