假设我有一系列具有不同名称的关键字参数的函数
foo(x, y; a=1, b=2) = (a + b) / (x + y)
bar(x, y; c=3, d=4) = (x - y) * (c - d)
假设我有第三个函数将函数作为参数。我希望能够在调用第三个函数时将任何关键字参数传递给前两个函数之一。
master(x, y; fun::Function=foo, args...) = fun(x, y, args...)
尝试使用关键字参数调用master
函数时出现问题。
julia> master(pi, e, fun=bar)
-0.423310825130748
julia> master(pi, e, fun=bar, c=4)
ERROR: MethodError: `bar` has no method matching bar(::Irrational{:π}, ::Irrational{:e}, ::Tuple{Symbol,Int64})
Closest candidates are:
bar(::Any, ::Any)
有没有办法传递关键字参数而不必迭代检查参数名称?
如果问题不清楚,请告诉我,我很乐意澄清。我已经找到了其他问题,但我看到的解决方案通常会显示如何获取名称 - 值对,而不是如何使用关键字参数将其传递给其他函数
答案 0 :(得分:3)
要突出显示spencerlyon2在评论中给出的答案,我的问题是在调用,
时使用逗号(;
)而不是分号(fun
)来分隔关键字参数。
WRONG:
master(x, y; fun::Function=foo, args...) = fun(x, y, args...)
RIGHT:
master(x, y; fun::Function=foo, args...) = fun(x, y; args...)