允许函数忽略不受支持的关键字参数

Ale*_*ley 7 keyword-argument julia

是否有一种允许函数忽略不受支持的关键字参数的好方法?

fopts = [:kw1]
opts = Dict(:kw1=>:symb1, :kw2=>:symb2)

function f(; kw1 = :symb)
    return kw1
end
Run Code Online (Sandbox Code Playgroud)

f(;opts...) 会抛出一个 METHOD ERROR

我可以把它包装成这样的东西,但是我还需要知道哪些kwargs f会支持?

function f2(fopts; kwargs)
    f(; Dict(key=>get(opts, key, 0) for key in fopts)...)
end
Run Code Online (Sandbox Code Playgroud)

我错过了解决这个问题的方法.如果存在性能损失,那就不是那么好了,因为我想他们可能需要进行某种查询.是否有一种很好的方式来询问kwargs以f编程方式接受的内容?

avy*_*ysk 8

这是你想要的吗?

function g(; kw1 = :a, kw2 = :b, _whatever...)
    return (kw1, kw2)
end
Run Code Online (Sandbox Code Playgroud)

现在它的工作原理如下:

julia> g()
(:a,:b)

julia> g(kw1 = :c)
(:c,:b)

julia> g(kw2 = :d)
(:a,:d)

julia> g(kw2 = :e, kw1 = :f, kw3 = :boo)
(:f,:e)
Run Code Online (Sandbox Code Playgroud)