如何将字典传递给带有关键字参数的函数?

ahm*_*hm5 6 mapping dictionary function julia

假设我有这个Dict

d=Dict("arg1"=>10,"arg2"=>20)
Run Code Online (Sandbox Code Playgroud)

和这样的函数:

function foo(;arg1,arg2,arg3,arg4,arg5)
  #Do something
end
Run Code Online (Sandbox Code Playgroud)

如何调用函数并将Dictd 中的参数作为函数的参数传递?我知道我可以这样做:

foo(arg1=d["arg1"],arg2=d["arg2"])
Run Code Online (Sandbox Code Playgroud)

但有什么办法可以自动化这个过程吗?我的意思是一种找出 Dict 中定义了哪些参数并将其自动传递给函数的方法。

pfi*_*seb 7

带键的字典Symbol可以直接splat放入函数调用中:

julia> d = Dict(:arg1 => 10, :arg2 => 12)
Dict{Symbol, Int64} with 2 entries:
  :arg1 => 10
  :arg2 => 12

julia> f(; arg1, arg2) = arg1 + arg2
f (generic function with 1 method)

julia> f(; d...)
22
Run Code Online (Sandbox Code Playgroud)

请注意函数调用中的分号,它确保 中的元素d被解释为关键字参数,而不是恰好是Pairs 的位置参数。

  • 请注意,分号对于解释为关键字参数很重要 (3认同)