首页 文章

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

提问于
浏览
2

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

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 回答

  • 2

    为了突出spencerlyon2在他的评论中给出的答案,我的问题是在调用 fun 时使用逗号( , )而不是分号( ; )来分隔关键字参数 .

    错误:

    master(x, y; fun::Function=foo, args...) = fun(x, y, args...)
    

    对:

    master(x, y; fun::Function=foo, args...) = fun(x, y; args...)
    

相关问题