我给了表格的功能
f(;a=1, b=2, c=3, d=4) = ...
Run Code Online (Sandbox Code Playgroud)
以及长度为4的向量,其中包含指示需要输入哪些关键字参数的布尔值,然后还有一个长度在1到4之间的向量,以便在相应的槽中输入(按顺序).例如,我可能会被给予
[true,false,true,false]
[5,100]
Run Code Online (Sandbox Code Playgroud)
那么我想要以下评估:
f(a=5, c=100)
Run Code Online (Sandbox Code Playgroud)
我如何高效优雅地完成这项工作?
小智 8
您可以使用(符号,任意)对列表中的布尔索引,zip和关键字splatting的组合:
julia> f(;a=1,b=2,c=3,d=4) = @show a,b,c,d
f (generic function with 1 method)
julia> ks = [:a,:b,:c,:d]
4-element Array{Symbol,1}:
:a
:b
:c
:d
julia> shoulduse = [true,false,true,false]
4-element Array{Bool,1}:
true
false
true
false
julia> vals = [5,100]
2-element Array{Int64,1}:
5
100
julia> kw = zip(ks[shoulduse], vals)
Base.Zip2{Array{Symbol,1},Array{Int64,1}}([:a,:c],[5,100])
julia> f(;kw...)
(a,b,c,d) = (5,2,100,4)
(5,2,100,4)
Run Code Online (Sandbox Code Playgroud)