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

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

function f(; kw1 = :symb)
    return kw1
end
f(;opts...)将抛出一个METHOD ERROR
我可以将其包装成这样,但是我仍然需要知道哪些kwargs f将支持?
function f2(fopts; kwargs)
    f(; Dict(key=>get(opts, key, 0) for key in fopts)...)
end

我是否想办法解决这个问题?如果有性能上的损失,不要那么大惊小怪,我想他们可能需要进行某种形式的查找。有没有一种好的方法来查询kwargs f以编程方式接受的内容?

最佳答案

这是你想要的吗?

function g(; kw1 = :a, kw2 = :b, _whatever...)
    return (kw1, kw2)
end

现在它像这样工作:
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)

关于julia - 允许函数忽略不受支持的关键字参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42578569/

10-12 01:19