2016-03-29 17 views
2

varsayalım ben farklı isimler Julia - Anahtar kelime argümanlarını başka bir işleve mi geçirdiniz?

foo(x, y; a=1, b=2) = (a + b)/(x + y) 
bar(x, y; c=3, d=4) = (x - y) * (c - d) 

Ve bağımsız değişken olarak bir işlev alır üçüncü işlevi olduğunu varsayalım anahtar kelime argümanları ile fonksiyonları bir dizi var. Bu üçüncü işlevi çağırırken herhangi bir anahtar kelime argümanını ilk iki işlevden birine iletmek istiyorum. Anahtar kelime argümanları kullanarak master işlevini çağırmak çalışırken

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

Benim sorun ortaya çıkar.

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) 

iteratif argüman isimlerini kontrol etmek zorunda kalmadan anahtar kelime argümanlar geçmesine bir yolu var mı?

Lütfen sorunun açık olmadığını ve açıklığa kavuşmaktan memnuniyet duyarız. Diğer sorulara baktım ama genel olarak gördüğüm çözümler, isim-değer çiftlerini nasıl kapılacağını gösterir, anahtar kelime argümanlarıyla diğer fonksiyonlara nasıl geçeceğine değil,

+5

;' anahtar kelime argümanları splatting önce. Bu yüzden belki de bunu deneyin (x, y; args ...) ' – spencerlyon2

+0

Huzzah! Tam olarak ihtiyacım olan şey buydu, bu kadar basit ve özür dilerim, eğer bu çok basit bir soru ise. Dürüst bir şekilde yüksek ve düşük arandı ve bu kadar az ayrıntıyı kaçırmış olmalı. –

cevap

2

Yanıt vermemek için yorum, benim problemim, fun numaralı telefonu ararken anahtar kelime bağımsız değişkenlerini ayırmak için noktalı virgül (;) yerine virgül (,) kullanıyordu.

YANLIŞ:

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

SAĞ:

Bir `koymak gerekir
master(x, y; fun::Function=foo, args...) = fun(x, y; args...) 
İlgili konular