检查Julia中是否存在关键字参数

时间:2016-02-02 15:15:34

标签: julia

我有一个函数使用...收集额外的关键字参数,所以它就像function f(args=0; kwargs...)。我想检查是否有关键字参数,让'比如,a存在kwargs

我所做的可能不是一种优雅的方式,我首先创建一个Dict来存储关键字和相应的值kwargs_dict=[key=>value for (key, value) in kwargs],然后我使用haskey(kwargs_dict, :a)来检查a这是dict的关键。然后我通过kwargs_dict[:a]得到它的价值。

function f(; kwargs...)
   kwargs_dict = [key=>value for (key, value) in kwargs]
   haskey(kwargs_dict, :a)
   a_value = kwargs_dict[:a]
end

f(args=0, a=2)
> true

f(args=0)
> false

我想知道是否有更好的方法来检查关键字参数a是否在kwargs中并获取现有关键字参数的值。

2 个答案:

答案 0 :(得分:6)

您可以将kwargs传递给Dict构造函数,以获取kwargs的字典表示。例如:

kwargs_dict = Dict(kwargs)

答案 1 :(得分:4)

另一种方法是使用命名关键字变量的默认值。默认值是一个特殊值(a.k.a sentinel值)。当用户提供值时,它会覆盖默认值,并且可以轻松检查。 nothing是常用值。具体来说,对于问题中的示例:

julia> function g(; a = nothing, kwargs...)
    kwargs_dict = [key=>value for (key, value) in kwargs]
    a != nothing
end
g (generic function with 1 method)

提供功能:

julia> g(args=0, a=2)
true
julia> g(args=0)
false

优点是第一速度 - 默认值关键字参数可以避免kwargs字典,如果可能,优化将删除整个字典设置代码。第二个优势可能是可读性(但是根据他自己的口味)。