Julia - 将关键字参数传递给另一个函数?

时间:2016-03-29 00:08:03

标签: function arguments parameter-passing julia

假设我有一系列具有不同名称的关键字参数的函数

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)

有没有办法传递关键字参数而不必迭代检查参数名称?

如果问题不清楚,请告诉我,我很乐意澄清。我已经找到了其他问题,但我看到的解决方案通常会显示如何获取名称 - 值对,而不是如何使用关键字参数将其传递给其他函数

1 个答案:

答案 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...)