假设我有一系列带有不同名称的关键字参数的函数
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)
有没有一种方法可以通过关键字参数传递而不必反复检查参数名称?
如果问题不清楚,请告诉我,我们很乐意澄清。我在寻找其他问题,但是我看到的解决方案通常显示如何获取名称-值对,而不是如何使用关键字参数将它们传递给其他函数
为了突出显示spencerlyon2在他的评论中给出的答案,我的问题是在调用时使用逗号(,
)而不是分号(;
)来分隔关键字参数fun
。
错误的:
master(x, y; fun::Function=foo, args...) = fun(x, y, args...)
正确的:
master(x, y; fun::Function=foo, args...) = fun(x, y; args...)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句