2016-03-29 119 views
2

假設我有不同的名稱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) 

有沒有辦法通過關鍵字參數而不必迭代檢查參數名稱?

請讓我知道如果問題不清楚,我很樂意澄清。我查找了其他問題,但是我所看到的解決方案通常顯示如何獲取名稱 - 值對,而不是如何將它們傳遞給其他具有關鍵字參數的函數

+5

你需要把';'潑灑關鍵字參數之前。所以也許試試這個'fun(x,y; args ...)' – spencerlyon2

+0

Huzzah!這正是我所需要的,非常感謝你,並且道歉,如果這太簡單的問題。誠實地搜索高低,並且必須錯過那個小細節。 –

回答

2

要突出顯示答案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...) 
相關問題